Windows での DLL/COM リダイレクト
DLL/COM リダイレクトは、Windows XP の企業管理者が採用するアプリケーション分離戦略です。
**Windows Server 2008、Windows Vista、Windows Server 2003、および WINDOWS XP sp2: ** マニフェストと サイド バイ サイド アセンブリ を使用する分離されたアプリケーションは更新とサービスを容易に行うことができるため、DLL/COM リダイレクト戦略の使用は推奨されません。 マニフェストが存在する場合、.local ファイルの存在は無視されます。 .local ファイルを使用する DLL/COM リダイレクト戦略は、アプリケーションにマニフェストがない場合に機能します。
DLL/COM リダイレクトは、アプリケーションをコンポーネントのローカル バージョンにバインドします。 ローカル コンポーネントのファイルは、アプリケーションに対してプライベートな場所にあるシステムのバージョンのコンポーネントとは別に保持できます。 システムのバージョンのコンポーネントはグローバルに登録され、それにバインドする他のアプリケーションで使用できます。 コンポーネントのローカル バージョンは、アプリケーションを排他的に使用するために予約されています。 必要に応じて、アプリケーションで使用されるコンポーネント ファイルを、システムのコンポーネント ファイルと同時にメモリに読み込むことができます。
DLL/COM リダイレクトは、アプリケーションの実行可能ファイルと同じディレクトリにローカル コンポーネント ファイルのコピーと共に特別なファイルをインストールすることによってアクティブ化されます。 特殊なファイルは、アプリケーション実行可能ファイルのファイル名の後に という名前の空のファイルで、.local が追加されます。 たとえば、Myapp という名前のアプリケーションに対して DLL/COM リダイレクトをアクティブにするには、コンポーネントのローカル バージョンと Myapp.exe.local という名前の空のファイルを、Myapp.exeを含むフォルダーにコピーする必要があります。 これにより、アプリケーションは、コンポーネントのグローバル共有バージョンではなく、コンポーネントのローカル バージョンにバインドされます。
アプリケーションが DLL や .ocx ファイルなどのコンポーネント ファイルを読み込むと、Windows は最初に、アプリケーションの .local ファイルと実行可能ファイルがインストールされているフォルダー内で検索します。 見つかった場合、アプリケーションは、アプリケーションまたはレジストリで定義されているディレクトリ検索パスに関係なく、そのコンポーネント ファイルを使用します。 見つからない場合は、定義された検索パス内のコンポーネント ファイルが使用されます。
DLL/COM リダイレクトを使用してアプリケーションをインストールするには、インストール ユーティリティで次の操作を行う必要があります。
- 空の .local ファイルは、アプリケーションの実行可能ファイルと同じフォルダーにコピーする必要があります。
- アプリケーションで使用されるすべてのコンポーネント、DLL、および .ocx ファイルは、アプリケーションの実行可能ファイルと同じフォルダーにコピーする必要があります。
- 分離 COM コンポーネントは、異なるバージョンのアセンブリが同時にメモリに読み込まれるときに互いに競合しないように Windows に登録する必要があります。 登録プロセスでは、コンポーネントの実装はバージョン間で変更できますが、CLSID、ProgID、タイプ ライブラリ、スレッド モデルなどの特定の COM メタデータは変更できません。
- アプリケーションが Windows インストーラーを使用してインストールされている場合は、LockPermissions テーブルを使用してアプリケーション ディレクトリをセキュリティで保護できます。 通常、システムには読み取り、書き込み、実行のアクセス権が付与されます。他のすべてのプロセスには、実行アクセスと読み取りアクセスのみが付与されます。