2010-07-01 103 views
18

我设计了一个应用程序,它不需要安装,可供非管理员使用。我宁愿不会失去此功能,但是当我在其他计算机上使用.exe而不是我对其编程时,我得到一个错误消息,MSVCP100.dll正在阻止该文件执行。使用VS 2010构建exe文件后C++丢失MSVCP100.dll

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

谢谢!

回答

30

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

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

为您的调试版本选择多线程(/ MT)(或多线程调试(/ MTd))。

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

+0

尽管如此,理想情况下,您需要使用清单并通过ClickOnce进行分发,以便将来使用的.dlls补丁能够适当更新。但这也有效:) – MSN 2010-07-01 23:23:56

+0

@MSN:虽然这种做法违背了“不需要安装”部分;) – Cogwheel 2010-07-01 23:24:48

+0

更不用说“C++”部分了。 – 2010-07-01 23:34:27

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.dllC:\Windows\SysWOW64\

64位msvcp100.dllC:\Windows\System32\

+0

”或者,只需将msvcp100.dll复制到您的应用程序目录旁边.exe,您就可以轻松前往。“我的理解是你没有被允许这样做? – 2011-08-18 10:50:54

3

我在做什么错在这里

你遇到了什么是DLL地狱。您曾无意中在前一个编译器中使用了一个动态链接,在大多数目标系统上发生的情况是有适当的C运行时。 Windows通常包括VC 6 CRT,以及更新的SP甚至CRT 7。

当您更改为最新的VC编译器时,大多数系统将不会为您预先安装新的VC运行时。

由于Michael Burr说,如果静态链接,可以回到'不安装'。

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

或者包括VS2010的Vcredist.exe的,并有1关安装

+2

这不会被称为“不知道该怎么办吗?” – 2010-07-01 23:36:00

+0

这是值得一分。 :) – 2010-07-02 00:07:29

+0

我第二。绝对值得一分。 – 2012-09-14 15:07:01