分離コンポーネント

インストール パッケージの作成者は、インストーラーでアプリケーションの共有ファイル (一般的には共有 DLL) が共有の場所ではなくアプリケーションのフォルダーにコピーされるように指定できます。 これで、このプライベート ファイル セット (DLL) は、そのアプリケーションによってのみ使用されます。 この方法でアプリケーションをその共有コンポーネントと一緒に分離すると、次のような利点が得られます。

  • アプリケーションが、デプロイに使用した共有ファイルのバージョンを常に使用します。
  • アプリケーションのインストールによって、他のアプリケーションによって共有されるファイルの他のバージョンを上書きすることがありません。
  • 共有ファイルの別のバージョンを使用する他のアプリケーションを後からインストールしても、このアプリケーションによって使用されるファイルを上書きすることがありません。

COM の現在の実装では、CLSID/Context ペアごとに 1 つの完全パスがレジストリに保持されるため、強制的にすべてのアプリケーションが同じバージョンの共有 DLL を使用することになります。 アプリケーションが COM サーバーのプライベート コピーを保持できるようにするには、Windows 2000 のシステム ローダーが、アプリケーションのフォルダー内の .LOCAL ファイルの存在を確認します。 システム ローダーによって .LOCAL ファイルが検出されると、検索ロジックが変更され、アプリケーションと同じフォルダー内に配置された DLL が優先されるようになります。

Windows インストーラーが IsolateComponents アクションを実行するとき、IsolatedComponent テーブル の Component_Shared 列に指定されたコンポーネントのファイル (通常は共有 DLL) を、Component_Application 列に指定されたコンポーネント (通常は .exe ファイル) と同じフォルダーにコピーします。 インストーラーは、このディレクトリにファイル (サイズはゼロ バイト) を作成し、Component_Application のキー ファイルの短いファイル名 (通常、この名前はアプリケーションの .exe の名前) の後に .LOCAL を付けます。 インストーラーは、共有の場所にあるコンポーネントの登録を使用し、プライベートの場所にあるコンポーネントのコピーの登録情報は書き込みません。

詳細については、次を参照してください。