我设计了一个无需安装且可以被非管理员使用的应用程序。我不想失去这个功能,但是当我在其他电脑上使用.exe文件时,会出现一个错误提示,指出缺少MSVCP100.dll文件导致无法执行该文件。
我做错了什么?我该如何在发布版本中包含该文件?
谢谢!
我设计了一个无需安装且可以被非管理员使用的应用程序。我不想失去这个功能,但是当我在其他电脑上使用.exe文件时,会出现一个错误提示,指出缺少MSVCP100.dll文件导致无法执行该文件。
我做错了什么?我该如何在发布版本中包含该文件?
谢谢!
配置项目以静态链接到 C/C++ 运行时库,而不是链接到运行时 DLL:
选择 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++ 程序,则通常更容易静态链接。
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\
我在这里做错了什么
你遇到了dll地狱。你无意中使用了与先前编译器的动态链接,在大多数目标系统上,都有适当的C运行时。Windows经常包括VC 6 CRT,并且随着更近期的SP甚至包括VC7和8 CRT。
当你切换到最新的VC编译器时,大多数系统将没有预安装新的VC运行时。
正如Michael Burr所说,如果你静态链接,就可以恢复“无需安装”。
或者你可以在同一个文件夹中包含CRT和清单,仍然不需要安装。
或者包含来自VS2010的vcredist.exe并进行一次性安装。