【问题标题】:Problems with running EXE file built with Visual Studio on another computer在另一台计算机上运行使用 Visual Studio 构建的 EXE 文件的问题
【发布时间】:2013-02-24 04:34:45
【问题描述】:

我使用 Visual Studio 在 C++ 中创建了一个客户端服务器应用程序。

现在我想在另一台计算机(没有安装 Visual Studio)上运行客户端 EXE 文件, 但是当我尝试运行 EXE 文件时,它会给出以下错误消息:

此应用程序无法启动,因为该应用程序 配置不正确。重新安装应用程序可能会解决此问题 问题。

如何在不安装任何东西的情况下运行 EXE 文件?

【问题讨论】:

  • 计算机是否有正确版本的 C 运行时库。 inlcude msvcrtXX.dll 很常见,其中 XX 是版本号。在安装包中。

标签: c++ visual-studio visual-studio-2008 visual-c++ exe


【解决方案1】:

使用 Visual Studio 构建的应用程序依赖于 Visual C++ Redistibutable (VCRedist)。当程序被动态链接时,您的二进制文件将需要 MSVCR**.dll(Microsoft C 运行时库)。

在 MSDN 上,有一篇名为 Redistributing Visual C++ Files (for Visual Studio 2008) 的好文章指出,如果需要 Visual C++ 库,则存在潜在的运行时错误未安装:

根据您尝试运行应用程序的 Windows 版本,您可能会收到以下错误消息之一:

  • 应用程序未能正确初始化 (0xc0000135)。
  • 此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。
  • 系统无法执行指定的程序。
基本上你有两个选择:
  • 最简单的解决方案是将运行时库的动态链接更改为静态链接。转到项目属性,在 C/C++ → 代码生成 下,您将找到 Runtime Library 选项。您需要将其从 多线程 DLL (/MD) 更改为 多线程 (/MT)
  • 另一个可能的解决方案是确保在目标计算机上安装了正确版本的 Microsoft VC++ Redistributable Package。

但您的应用程序也可能依赖于其他 DLL 文件。如果您想了解程序的依赖项是什么,有一个名为 Dependency Walker 的强大实用程序将在这种情况和许多其他情况下为您提供帮助:)

【讨论】:

  • +1 用于建议静态链接。这是 OP 问题的真正答案(如何在不安装任何东西的情况下运行)。 depends 是找出缺少哪些库的好工具。
  • 您的第二个要点对 OP 没有帮助,因为她有一个限制,即她不能在目标机器上安装任何东西。还有两个以上的解决方案 - 请参阅 Nayana 的回答。
  • 抱歉,我无法从 DLL 更改。而且我正在尝试运行 exe 文件而不在另一台计算机上安装任何东西
【解决方案2】:

背景:

  • C++ 应用程序需要运行时程序集(DLL 文件)才能在任何 Windows 计算机上运行。
  • 通常这些运行时程序集位于 C:\Windows\Winsxs 目录中。
  • 默认情况下,所有 Windows 操作系统都带有多个运行时程序集。
  • 但如果您的应用程序是在较新版本的运行时汇编环境中开发的,那么目标计算机也需要相同版本的运行时才能存在于那里。
  • 当您安装 Visual Studio 时,大多数较新版本的运行时程序集都会进入您的计算机。

解决方案:

最后无论如何目标计算机应该有准确的运行时程序集。有几种方法可以做到这一点(更多详情请在 Google 中搜索)。

  1. 将运行时程序集与您的应用程序静态链接(对于大型应用程序来说很麻烦)。
  2. 在目标计算机上安装 C++ 再分发环境(最简单的方法)。
  3. 创建安装项目以在安装应用程序时在目标计算机上部署运行时(不错)。
  4. 如需将运行时程序集部署为私有程序集(专业),请参阅here 了解更多详情

条件:

  • 您不得在应用程序中使用 .NET 框架。
  • 您不得为您的应用程序使用公共语言运行时支持

【讨论】:

  • 在我看来,这应该是公认的答案,因为它是唯一提到私有程序集选项的答案。其他一些答案是完全错误的,因为它们声明只有两个选项(其中一个选项对 OP 无用,因为她有一个限制,即不在目标机器上安装任何东西)。
  • 我已尝试部署运行时程序集并安装 C++ 重新分发,但我仍然遇到相同的错误
  • 好的,我现在就来帮助你,所以你必须尽快回复我 :),你的应用程序只包含一个 exe 还是它包含任何其他 DLLs
【解决方案3】:

我以前没有看到过这个特定的错误。通常这是缺少 DLL(Windows 可再发行组件)的错误。假设配置实际上没有问题,您有两种选择:

  1. 将编译模式从 多线程 DLL 更改为 多线程。这可以从代码生成下项目属性的 C++ 部分完成。在多线程模式下,您的二进制文件将静态链接到 Windows 可再发行组件。这可能就是你想要的。

  2. 在目标机器上安装 Windows 可再发行组件。这可能不行,因为您声明您不想在目标机器上安装任何东西。

关于选项 1 的警告:不同版本的 Windows 具有不同版本的可再发行组件。可能会遇到高度专业化的环境,其中静态链接的程序不会按预期运行。

【讨论】:

  • 有两个以上的选择。请参阅 Nayana 的回答。
【解决方案4】:

我在发布而不是调试中部署了我的程序,并且 EXE 文件现在可以在另一台计算机上运行。

【讨论】:

    【解决方案5】:

    您似乎缺少一些 DLL 文件。请务必将相应的 DLL 文件与 EXE 文件一起复制。

    【讨论】:

    • 听起来他缺少 VC++ 运行时 DLL。他问他如何在没有它们的情况下发送一个 exe,所以你的回答没有帮助。
    • 如果缺少的依赖项不是 C++ 可再发行组件,答案确实会有所帮助。您确实意识到程序员可以使用各种 dll,而不仅仅是 MSVC 的,对吧?
    • @caesar 不,他没有说没有它们就发送.exe,他说没有安装任何东西,所以这个答案很好。
    • 遇到了同样的问题。您的应用程序需要的任何 .dll 都放在 Release 文件夹中。因此,当我只复制 .exe 时,它​​不会打开,因为它正在寻找 .dll。带上你的 .dll 和 .exe,或者如果可以的话,删除依赖项。
    猜你喜欢
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2022-11-06
    相关资源
    最近更新 更多