使用VS 2010 C++构建exe后出现MSVCP100.dll丢失的问题。

18

我设计了一个无需安装且可以被非管理员使用的应用程序。我不想失去这个功能,但是当我在其他电脑上使用.exe文件时,会出现一个错误提示,指出缺少MSVCP100.dll文件导致无法执行该文件。

我做错了什么?我该如何在发布版本中包含该文件?

谢谢!

4个回答

30

配置项目以静态链接到 C/C++ 运行时库,而不是链接到运行时 DLL:

  • 配置属性 | C/C++ | 代码生成 | 运行时库

选择 Multi-threaded (/MT)(或 Multi-threaded Debug (/MTd) 用于调试构建)。

作为替代方案,您应该能够使用在http://msdn.microsoft.com/en-us/library/ms235291.aspx文档“将 Visual C++ 库 DLL 部署为专用程序集”标题下记录的技术来获得 C/C++ 运行时 DLL 的 xcopy 部署。我没有尝试过这种技术,因为如果您需要 xcopy 安装本机 C++ 程序,则通常更容易静态链接。


理想情况下,您应该使用清单,并通过 ClickOnce 进行分发,以便将来对您使用的 .dlls 的补丁得到适当更新。但这也有效 :) - MSN
@MSN:虽然这有点违背“无需安装”的要求 ;) - Cogwheel
更不用提“c++”部分了。 - Hans Passant
非常感谢您的答复。在阅读了您的解决方案之前,我花费了大量时间尝试让我的可执行文件在另一台计算机上运行,但没有任何成功。 - Nate

4

http://msdn.microsoft.com/en-us/library/ms235299.aspx

分发使用Visual C++编译的应用程序需要分发应用程序使用的C++运行时.dll文件。在您的情况下,我假设您只想分发一个文件夹,请按照这里的说明(适当修改为您的应用程序)进行操作:

http://msdn.microsoft.com/en-us/library/dd293565.aspx

或者只需将 msvcp100.dll 复制到您的应用程序目录中,与 .exe 文件并排放置即可。

32 位 msvcp100.dll 位于 C:\Windows\SysWOW64\

64 位 msvcp100.dll 位于 C:\Windows\System32\


或者只需将msvcp100.dll复制到您的应用程序目录中,与.exe文件并列放置即可。这样做就可以了。我的理解是这样做是不允许的? - Fire Lancer

3

我在这里做错了什么

你遇到了dll地狱。你无意中使用了与先前编译器的动态链接,在大多数目标系统上,都有适当的C运行时。Windows经常包括VC 6 CRT,并且随着更近期的SP甚至包括VC7和8 CRT。

当你切换到最新的VC编译器时,大多数系统将没有预安装新的VC运行时。

正如Michael Burr所说,如果你静态链接,就可以恢复“无需安装”。

或者你可以在同一个文件夹中包含CRT和清单,仍然不需要安装。

或者包含来自VS2010的vcredist.exe并进行一次性安装。


2
这不应该被称为“不知道什么是 DLL 地狱”吗? - Hans Passant

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接