25

我是否可能需要同时为 vs2012 和 vs2010 安装 vcredist?

我刚刚遇到一个错误,我的应用程序无法加载 .dll 并且在我进行了不相关的安装后它突然开始工作,这促使我猜测它一定安装了一个较旧的 vcredist 来解决这个问题。但是我确定我使用的是 c++11 功能。

4

4 回答 4

16

部署本身就是一项工作。我讨厌它,我讨厌你必须在 Windows 上编写安装的方式。…所以现在感觉好多了…</p>

你只需要一个vcredist。链接器决定将您的程序链接到的那个。如果您安装了“Windows SDK”,您将在以下位置找到实际的 redist:

C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\vcredist_x86

如果您安装了所有更新,包括不重要的更新,Microsoft 将在该文件夹中更新您的 redist!

也许你有一个不想运行的可执行文件,你需要依赖 walker。一个工具,非常有用,以至于微软不得不从 Visual Studio 中删除它。下载程序并在其中打开您的exe。你不需要了解真正发生的事情。只要打开过程中没有出现Dialog,一切正常,即使底部窗口有感叹号。如果对话框出现“无法解决”之类的问题,请查看底部窗口。通常现在在下部窗口中有类似“msvcr.dll”或“msvcr100.dll”或“msvcr110.dll”的内容。如果它在“msvcr100d.dll”之类的扩展名之前包含“d”,则可执行文件在调试模式下编译,并且您的旅程将在没有安装编译器的系统上结束。如果不,

msvcr100 = VS 2010 redist (32bit) (64bit)

msvcr110 = VS 2012 redist (32/64bit?)

有时它不是 msvcr,但它总是以“ms”开头。当然,该程序会告诉您每个缺少的 dll,不仅是 microsoft,还告诉您使用了 dll 中的哪个命令。这有时非常有用。您必须对可执行文件文件夹中的每个 dll 执行此操作,因为它们也可能具有无法解决的依赖关系。
回到你的第一个问题。您的程序只能链接到 msvcr100 或 msvcr110,不能同时链接到两者,这就是每个可执行文件只需要一个 vcredist 的原因。正如评论中提到的,第三方 DLL 可能会因使用不同的 msvcp 版本而犯错。所以,是的,你必须搜索你使用的所有 DLL,并且有时你必须安装两个 vcredist。

PS:总是至少有两个,msvcr和msvcp。

于 2013-09-03T19:30:17.227 回答
8

我按如下方式解决了这个问题(在 Windows 7 上):

  1. 我尝试加载库,但它未能显示“应用程序无法启动,因为它的并排信息不正确。”
  2. 我打开“计算机管理”窗口:开始->右键单击计算机->管理。
  3. 在“计算机管理”窗口中,我选择了“事件查看器”->“Windows 日志”->“应用程序”。
  4. 错误对应的日志说没有找到某个版本的Microsoft.VC90.CRT的DLL。在我的情况下,版本是 9.0.30729.6161,在 Google 中搜索它显示我需要从这里安装一个“不寻常”的可再发行版本。

依赖遍历器对我没有帮助(它只是通过报告不必要的依赖而让我感到困惑)。

于 2014-05-03T18:45:51.363 回答
8

如果您想知道需要哪些运行时,您可以尝试使用 github ( https://github.com/lucasg/Dependencies ) 上 lucasg 的“依赖项”工具,该工具适用于 win10 等现代系统。

您只需在依赖关系树中查找MsVcR##.dllo VcRuntime###.dll(其中 # 代表数字)。

高温高压

PS:我们多年来一直使用的老牌“依赖步行者”似乎无法处理新操作系统处理延迟依赖的方式,将它们标记为“丢失”,虽然它们没有丢失,只是延迟加载一种它不知道的方式...

于 2018-03-19T17:27:36.237 回答
2

如果您的操作系统是 Vista 或更高版本(不是 XP),请使用内置的 SxStrace.exe 生成正在加载哪些 DLL 以及哪些模块需要它们的日志。它将清楚地显示是否正在加载多个 CRT DLL 版本,以及用于哪些 DLL(第 3 方或没有)。

VS2012 可再发行组件被放入,例如“C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\redist”。

- 大卫

于 2013-09-09T03:27:24.190 回答