2

Windows XP では、ローカル アプリケーション ディレクトリにmsvcp90.dllmsvcr90.dll、およびで実行される .exe があります。Visual C++ 2008 SP1 Redistributable Packageによってインストールされた、Microsoft.VC90.CRT.manifestこれらの .dll のポリシー ファイルも にあります。このポリシー ファイルを削除し、代わりにローカル ディレクトリにあるアプリ構成ファイルを使用したいと考えています。ポリシー ファイルは次のとおりです。C:\WINDOWS\WinSxS\Policies

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity type="win32-policy" name="policy.9.0.Microsoft.VC90.CRT" version="9.0.30729.1" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
            <bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30729.1"/>
            <bindingRedirect oldVersion="9.0.30201.0-9.0.30729.1" newVersion="9.0.30729.1"/>
        </dependentAssembly>
    </dependency>
</assembly>

私の設定ファイルは次のとおりです。

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
            <dependentAssembly>
                <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"/>
                <bindingRedirect oldVersion="9.0.20718.0-9.0.21022.8" newVersion="9.0.30729.1"/>
                <bindingRedirect oldVersion="9.0.30201.0-9.0.30729.1" newVersion="9.0.30729.1"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

ポリシー ファイルの代わりに構成ファイルを使用すると、Dependency Walker がサイド バイ サイド エラーを報告します - 何が問題なのですか? また、設定ファイルの名前<application>.exe.configは 、またはMicrosoft.VC90.CRT.config?

(明確にするために、ポリシー ファイルを使用してもエラーは表示されません。ただし、ここのクライアントは再配布可能パッケージをインストールすることはできません。

MSDNのドキュメントには、アプリ構成ファイルは同じアセンブリ (アプリケーションごとの構成)の異なるバージョンを使用するようにアプリケーションをリダイレクトでき、必要に応じて既存のポリシー (発行者構成) ファイルをオーバーライドできると記載されています。したがって、ローカルのアプリ構成ファイルを使用できるはずであり、上記のファイルの何かが欠落しているか間違っていると思います。)

4

2 に答える 2

2

構成データは<runtime>ノードの下にあります。代わりに、<windows>ノードの下にある必要があります。

バインディング リダイレクトを含むアプリケーション構成ファイルを出荷することは、非常に推奨されておらず、システム管理者が管理するマシンで appcompat の問題を処理することを意図していることに注意する必要があります。アプリケーション開発者は代わりに、依存する CRT の特定のバージョンの最新リビジョンで動作するようにアプリケーションを作成し、そのバージョンに同梱されている既定のグローバル ポリシーを使用する必要があります。

実際、Windows 2003 以降、アプリケーション構成ファイルでバインディング リダイレクトを使用するには、アプリケーション互換性データベースにエントリが必要です。

于 2011-12-02T00:24:08.520 に答える
0

セキュリティ上の理由から、この方法で C ランタイムをリダイレクトできないことは理解しています。オプションは、ランタイムをプロジェクトに静的にビルドするか、Side-By-Side システムを使用せずにアプリケーション ディレクトリから DLL をロードすることです。

于 2011-09-27T16:33:37.277 に答える