我设计了一个不需要安装的应用程序,非管理员可以使用它。我宁愿不会失去这个功能但是当我在其他计算机上使用.exe而不是我编程的那个计算机时,我得到一个错误,即错过的MSVCP100.dll阻止文件执行。
我在这里做错了什么?如何在发布版本中包含该文件?
谢谢!
答案 0 :(得分:30)
将项目配置为静态链接到C / C ++运行时,而不是链接到运行时DLL:
为您的调试版本选择多线程(/ MT)(或多线程调试(/ MTd))。
作为替代方案,您应该能够使用http://msdn.microsoft.com/en-us/library/ms235291.aspx中标记为“将Visual C ++库DLL作为私有程序集部署”标题下的技术来获取C / C ++运行时DLL的xcopy部署。我没有尝试过这种技术,因为如果需要xcopy安装本机C ++程序,通常只需要静态链接。
答案 1 :(得分: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\
答案 2 :(得分:3)
我在这里做错了什么
你所拥有的是地狱。您无意中使用了与之前编译器的动态链接,它在大多数目标系统上发生了恰当的C运行时。 Windows通常包括VC 6 CRT,以及更新的SP甚至VC7& 8 CRT。
当您更改为最新的VC编译器时,大多数系统都不会为您预先安装新的VC运行时。
正如Michael Burr所说,如果您静态链接,可以将“无法安装”恢复。
或者您可以将CRT和清单包含在同一文件夹中,但仍然不需要安装。
或者包含VS2010中的vcredist.exe并安装1次
答案 3 :(得分:1)