【发布时间】:2014-06-14 01:35:35
【问题描述】:
我设计了一个无需安装且可供非管理员使用的应用程序。我宁愿不要失去这个功能,但是当我在其他计算机上使用 .exe 而不是我在其上编程的计算机时,我收到一个错误,即缺少 MSVCP100.dll 正在阻止文件执行。
我在这里做错了什么?如何在我的发布版本中包含该文件?
谢谢!
【问题讨论】:
标签: visual-c++ visual-studio-2010
我设计了一个无需安装且可供非管理员使用的应用程序。我宁愿不要失去这个功能,但是当我在其他计算机上使用 .exe 而不是我在其上编程的计算机时,我收到一个错误,即缺少 MSVCP100.dll 正在阻止文件执行。
我在这里做错了什么?如何在我的发布版本中包含该文件?
谢谢!
【问题讨论】:
标签: visual-c++ visual-studio-2010
将您的项目配置为静态链接到 C/C++ 运行时,而不是链接到运行时 DLL:
为您的调试版本选择多线程 (/MT)(或多线程调试 (/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 并进行 1 次安装
【讨论】: