23

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

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

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

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

4

6 回答 6

25

使用 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++ → 代码生成下,您将找到运行时库选项。您需要将其从Multi-threaded DLL (/MD)更改为Multi-threaded (/MT)
  • 另一种可能的解决方案是确保在目标机器上安装了正确版本的 Microsoft VC++ Redistributable Package。

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

于 2013-03-08T15:28:52.423 回答
13

背景:

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

解决方案:

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

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

条件:

  • 您不得在应用程序中使用 .NET 框架。
  • 您不得为您的应用程序使用公共语言运行时支持
于 2013-03-08T15:41:23.893 回答
6

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

于 2013-03-11T16:05:31.507 回答
5

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

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

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

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

于 2013-03-08T15:24:34.413 回答
3

看起来您缺少一些 DLL 文件。请务必将适当的 DLL 文件与 EXE 文件一起复制。

于 2013-03-08T15:21:55.320 回答
0

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

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

重建你的项目。所有必要的 dll 都将被复制到项目的输出目录中。将您的 exe 和所有 dll 复制到另一台计算机。exe 应该找到运行所需的一切。

于 2022-01-02T22:29:52.283 回答