为什么不将 Msvcr71.dll 安装到 system32 中?

hil*_*llu 3 windows windows-7 dll windows-xp

在寻找Msvcr71.dll一些旧应用程序所需的缺失的权威来源时,我偶然发现了 MSDN 文章Redistribution of the shared C runtime component in Visual C++。给开发人员的建议是将 DLL 放入应用程序的目录中,而不是system32因为该目录中的 DLL 在系统路径之前被考虑。

如果我(作为管理员,而不是开发人员)决定采用惰性路径并安装Msvcr71.dll(并且Msvcp71.dll在我安装时)到system32目录(32 位 Windows XP 或 Windows 7 系统)而不是在每个应用程序的目录中放置一个副本?是否有另一个很好的解决方案可以为应用程序提供所需的 DLL,而不涉及将内容复制到应用程序目录?

在第一个答案之后添加:我知道可能对提到的 DLL 进行了不兼容的 API 更改,但几乎每次提到我使用 Google 发现的不兼容性都与游戏或视频编解码器有关。现在,我预计破损的风险很小。我错过了什么吗?

kab*_*oom 5

主要(唯一?)问题是不同版本的 Msvcr71.dll 之间的兼容性。假设 7.10.0 与 7.10.1 稍微不兼容,应用程序 App1 依赖于旧行为,应用程序 App2 依赖于新行为。此外,这两个应用程序本身都不提供此 C++ 运行时。在这种情况下,两个应用程序之一将失败。

这些案件发生的频率如何?我真的不知道,但我会说他们很少。

根据 msvcr71.dll 版本之间的差异,应用程序将无法启动或特定功能将无法运行。

另一个很好的解决方案:为每个应用程序设置自己的 PATH。例如,您可以编写这样的批处理:

PATH=c:\PathToMSVCR71.DLL_Version_7.10.0
myapp1.exe
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以在多个应用程序中重用同一个 DLL 并更轻松地更新它。

编辑 几乎不可能估计版本冲突的危险,特别是因为您没有提到您使用的应用程序。这就是为什么我在我的 PC (Windows 7/x64) 上搜索了所有不同的版本。我找到了以下文件: 替代文字

所有文件都只是这两个文件的副本:7.10.3052.4 和 7.10.6030.0。7.10.3052.4 也是 dll-files.com 提供的。

我还比较了dumpbin /imports /exports msvcr71.dll这些版本的输出,出口和进口都没有改变(如预期的那样)。