0

2 つのライブラリを使用するソフトウェアを開発しています。これら 2 つのライブラリは両方とも VS2005 を使用しており、両方とも VS2005 再配布パッケージが必要です。ただし、再配布パッケージは異なるバージョンです。それで、再配布リストのインストールについていくつか質問があります。

1) 問題なく新しいバージョンをインストールできますか? 2) これら 2 つの redist をインストールすると、Windows はどのライブラリがどの redist を使用しているかをどのように認識しますか?

ありがとう

4

1 に答える 1

3

XP 以降、DLL は Windows のサイド バイ サイド キャッシュにインストールされます (または、インストールすることができます) (実際、VS2005 DLL はサイド バイ サイド キャッシュで検出されることを主張し、それ以外の場合は実行を拒否します)。

Windows のサイド バイ サイド キャッシュ (C:\WINDOWS\WINSxS にあります) では、DLL は名前とバージョンで識別されるサブ フォルダーに置かれます。そうすれば、複数のバージョンの DLL を並べてインストールできます。

Visual Studio アプリケーションをコンパイルすると、コンパイラはリンカにマニフェスト ファイルを生成するように指示します。このマニフェスト ファイルは、MT コマンドを使用して実行可能ファイルまたは DLL にリンクできます。

このマニフェスト ファイルには、前に説明したものと同じバージョン番号が含まれており、Windows はこの情報を使用して、実行可能ファイルまたは DLL をロードするときにロードする DLL を見つけます。

あなたの質問では、使用している 2 つのライブラリが DLL か LIB かが明確ではありません。それらが DLL である場合、上記のシステムが使用され、おそらく問題はないでしょう。新しいバージョンのインストールを試みることもできますが、Windows で問題が発生した場合は、古いバージョンも安全にインストールできます。

ただし、LIB を使用している場合は、問題が発生する可能性があります。LIB ごとに使用する DLL を示す方法はありません。実行可能ファイルは、2 つではなく、1 つの DLL (実際には DLL の 1 つのバージョン) のみを参照できます。

この場合にできることは、サイド バイ サイド キャッシュのポリシーを確認することです。これは C:\WINDOWS\WINSxS\Policies にあります)。コンポーネントごとにサブ フォルダがあり、フォルダ内にポリシー ファイルがあります。ポリシー ファイルはリダイレクトを指定できるため、アプリケーションがバージョン X を想定している場合、バージョン Y も許可されているという情報をポリシーに含めることができます。

これは、ポリシー ファイルの例です。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright © 1981-2001 Microsoft Corporation -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

    <assemblyIdentity type="win32-policy" name="policy.8.0.Microsoft.VC80.ATL" version="8.0.50727.4053" processorArchitecture="amd64    " publicKeyToken="1fc8b3b9a1e18e3b"/>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.VC80.ATL" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b"    />
            <bindingRedirect oldVersion="8.0.41204.256-8.0.50608.0" newVersion="8.0.50727.4053"/>
             <bindingRedirect oldVersion="8.0.50727.42-8.0.50727.4053" newVersion="8.0.50727.4053"/>
        </dependentAssembly>
    </dependency>

</assembly>

詳細については、MSDN で Side-by-side キャッシュとマニフェスト ファイルの使用方法を確認してください。

于 2010-03-18T17:43:43.740 に答える