2

在 Windows XP 上,我有一个 .exe,它与msvcp90.dllmsvcr90.dllMicrosoft.VC90.CRT.manifest在我的本地应用程序目录中运行。我还有一个用于这些 .dll 的策略文件C:\WINDOWS\WinSxS\Policies,它是由Visual C++ 2008 SP1 Redistributable Package安装的。我想删除此策略文件并改用本地目录中的应用程序配置文件。策略文件是:

<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 运行时。您的选择是将运行时静态构建到您的项目中,或者从您的应用程序目录加载 DLL,而不使用并排系统。

于 2011-09-27T16:33:37.277 回答