在另一台计算机上运行用Visual Studio构建的EXE文件时出现问题

Problems with running EXE file built with Visual Studio on another computer

本文关键字:EXE 构建 Studio 文件 问题 Visual 一台 运行 计算机      更新时间:2023-10-16

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

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

此应用程序启动失败,因为应用程序配置错误。重新安装应用程序可能会修复此问题问题。

我如何运行EXE文件而不安装任何在计算机上?

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

在MSDN上,有一篇很好的文章叫做 redistribution Visual c++ Files (for Visual Studio 2008),其中指出,如果所需的Visual c++库没有安装,则存在潜在的运行时错误:

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

  • 应用程序初始化失败(0xc0000135).
  • 由于应用程序配置错误,该应用程序启动失败。
  • 系统无法执行指定的程序。
基本上你有两个选择:
    最简单的解决方案是将运行库的动态链接更改为静态链接。转到项目属性,在C/c++→代码生成下,你会发现Runtime Library选项。您需要将其从多线程DLL (/MD)更改为多线程(/MT)
  • 另一个可能的解决方案是确保目标机器上安装了正确版本的microsoftvc++ Redistributable Package。

但是您的应用程序也可能依赖于其他DLL文件。如果你想知道你的程序的依赖项是什么,有一个很棒的实用程序叫做Dependency Walker,它将在这个和许多其他情况下帮助你:)

Background:

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

解决方案:

最后,无论如何,目标计算机应该具有确切的运行时程序集。有几种方法可以做到这一点(更多细节请在谷歌中搜索)。

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

条件:

  • 你不能在你的应用程序中使用。net框架。
  • 你不能为你的应用程序使用公共语言运行时支持

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

我以前没有见过这个特定的错误。通常这是一个错误周围的缺失DLL (Windows可重新分发)。假设配置实际上没有问题,您有两个选择:

  1. 将编译模式从多线程DLL更改为多线程。这可以从代码生成下的项目属性的c++部分完成。在多线程模式下,您的二进制文件将静态地链接到Windows可重新分发文件。

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

关于选项1的警告:不同版本的Windows有不同版本的可重分发文件。在高度专门化的环境中,静态链接的程序可能无法按照预期的方式运行。

看起来你丢失了一些DLL文件。请确保复制适当的DLL文件以及EXE文件。

我正在运行Visual Studio 2019,我发现了一个非常有用的配置属性来解决在没有安装包的情况下将一个简单的应用程序移动到另一台计算机的问题。

  • 打开项目属性页
  • 选择此更改应用于哪些配置,我使用"所有配置"。
  • 在左侧窗口单击展开顶部节点称为"配置属性"。
  • 点击"高级"。在右侧窗口中查找名为"Copy c++ Runtime to OutDir"的属性,并将其设置为"yes"。
  • 单击OK关闭属性窗口。

重建项目。所有必要的dll将被复制到项目的输出目录中。将exe和所有dll拷贝到另一台计算机上。