【问题标题】:After building exe using VS 2010 C++ missing MSVCP100.dll使用 VS 2010 C++ 构建 exe 后缺少 MSVCP100.dll
【发布时间】:2014-06-14 01:35:35
【问题描述】:

我设计了一个无需安装且可供非管理员使用的应用程序。我宁愿不要失去这个功能,但是当我在其他计算机上使用 .exe 而不是我在其上编程的计算机时,我收到一个错误,即缺少 MSVCP100.dll 正在阻止文件执行。

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

谢谢!

【问题讨论】:

    标签: visual-c++ visual-studio-2010


    【解决方案1】:

    将您的项目配置为静态链接到 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++ 程序,通常只静态链接会更简单。

    【讨论】:

    • 不过,理想情况下,您应该使用清单并通过 ClickOnce 进行分发,以便将来对您使用的 .dll 的补丁能够得到适当的更新。但这也有效:)
    • @MSN:虽然这种方式违背了“不需要安装”部分;)
    • 更不用说“c++”部分了。
    • 非常感谢您的回答。在阅读您的解决方案之前,我花了很多时间试图弄清楚如何让我的可执行文件在另一台计算机上运行但没有任何成功。
    【解决方案2】:

    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\

    【讨论】:

    • "或者只需将 msvcp100.dll 复制到应用程序的 .exe 目录中,就可以了。"我的理解是你不被允许这样做吗?
    【解决方案3】:

    我做错了什么

    你所拥有的是 dll 地狱。您无意中使用了与以前的编译器的动态链接,它只是发生在大多数目标系统上,有一个适当的 C 运行时。 Windows 通常包括 VC 6 CRT,以及更新的 SP 甚至 VC7 和 8 CRT。

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

    正如Michael Burr 所说,如果您静态链接,则可以恢复“未安装”。

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

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

    【讨论】:

    • 这不是叫“no-idea-what-dll-hell”吗?
    【解决方案4】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 2019-12-10
      • 2012-04-27
      • 2011-09-11
      相关资源
      最近更新 更多