【发布时间】:2010-11-18 22:39:07
【问题描述】:
最近的 Visual Studio 2005 安全更新可能会给我们带来问题。
我们构建并在内部分发用 C++ 编写的 SDK。这些 SDK 只是头文件和静态库的集合。安装安全更新后,我们的 SDK 现在依赖于较新版本的 MSVC CRT DLL。这些 SDK 在生成 EXE 文件的项目中用于下游。
如果其中一个 EXE 文件是使用混合 SDK 构建的(一些来自安全更新之前,一些来自之后),则生成的 EXE 文件会引用两组 MSVC 运行时 DLL。例如:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.4053" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b">
</assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="amd64" publicKeyToken="1fc8b3b9a1e18e3b">
</assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
这是否意味着在运行时这个 EXE 将使用两个版本的 DLL?这是否意味着我们必须使用此 EXE 分发两个版本的 MSVC 运行时 DLL?
是否有一种简单的方法可以避免此问题,而无需强制所有 SDK 都使用适当的 Visual Studio 2005 安全补丁来构建? (这对于我们不想不必要地重建的一些较旧且相当稳定的 SDK 来说是不可取的)
是否可以简单地重写 SDK 或最终 EXE 文件上的清单文件,以便只提及一个版本的 MSVC CRT DLL?
我的理解是相关更新如下:
Microsoft Visual Studio 2005 Service Pack 1 的安全更新:KB971090
http://go.microsoft.com/fwlink/?LinkId=155934
Microsoft Visual Studio 2008 Service Pack 1 的安全更新:KB971092
http://go.microsoft.com/fwlink/?LinkID=155933
我发现了另外两个类似的问题:
VC++: KB971090 and selecting Visual C Runtime DLL dependencies
【问题讨论】:
-
为什么要转移到社区维基?
标签: security dll version visual-c++ manifest