在另一台计算机上运行用Visual Studio构建的EXE文件时出现问题
Problems with running EXE file built with Visual Studio on another computer
我使用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时,大多数新版本的运行时程序集会进入你的计算机。
解决方案:
最后,无论如何,目标计算机应该具有确切的运行时程序集。有几种方法可以做到这一点(更多细节请在谷歌中搜索)。
- 静态链接运行时程序集与应用程序(对于大型应用程序来说很麻烦)。
- 在目标计算机上安装c++再分发环境(最简单的方法)。
- 创建一个安装项目,以便在安装应用程序时在目标计算机上部署运行时(还不错)。
- 要将运行时程序集部署为私有程序集(专业),请参阅此处了解更多详细信息
条件:
- 你不能在你的应用程序中使用。net框架。
- 你不能为你的应用程序使用公共语言运行时支持
我将程序部署在发布而不是调试中,并且EXE文件现在可以在另一台计算机上工作。
我以前没有见过这个特定的错误。通常这是一个错误周围的缺失DLL (Windows可重新分发)。假设配置实际上没有问题,您有两个选择:
-
将编译模式从多线程DLL更改为多线程。这可以从代码生成下的项目属性的c++部分完成。在多线程模式下,您的二进制文件将静态地链接到Windows可重新分发文件。
-
在目标机器上安装Windows可重发行版。这可能不太好,因为您声明不想在目标机器上安装任何东西。
关于选项1的警告:不同版本的Windows有不同版本的可重分发文件。在高度专门化的环境中,静态链接的程序可能无法按照预期的方式运行。
看起来你丢失了一些DLL文件。请确保复制适当的DLL文件以及EXE文件。
我正在运行Visual Studio 2019,我发现了一个非常有用的配置属性来解决在没有安装包的情况下将一个简单的应用程序移动到另一台计算机的问题。
- 打开项目属性页
- 选择此更改应用于哪些配置,我使用"所有配置"。
- 在左侧窗口单击展开顶部节点称为"配置属性"。
- 点击"高级"。在右侧窗口中查找名为"Copy c++ Runtime to OutDir"的属性,并将其设置为"yes"。 单击OK关闭属性窗口。
重建项目。所有必要的dll将被复制到项目的输出目录中。将exe和所有dll拷贝到另一台计算机上。
- VS:在构建/exe中包含资源文件
- cl.exe在哪里?(MS 构建工具 '13)
- 如何构建带有纹理和网格转换.exe的 SdkMesh?
- 无法在 Windows 7、32 位上使用 tdm-gcc 构建 cpp 文件(表示 exe 不兼容)
- 构建最终应用程序时,如何将HD映像从HD打包到.EXE文件中
- Vscode C++调试使用 cl.exe 和 / 链接构建的代码.exe - 调试器不附加
- MinGW在代码块中构建时的ar.exe "could not create temporary file whilst writing archive: no more archived files
- 我可以将使用v120_xp工具集构建的静态库链接到使用VS2013中的v120工具集创建的EXE/DLL中吗
- 将 exe 文件复制到 Qt 构建目录
- 无法构建,qmake.exe在Qt Creator中崩溃
- 使用默认 cl.exe 或自定义蝙蝠进行构建
- 错误:不是.exe已停止工作 - 尝试构建 LLVM 时
- 在没有 cygwin 环境的 Windows 中运行 cygwin 构建的 exe
- CL.exe 构建通用应用程序时编译器和库版本不匹配
- OpenCV构建正常,调试抛出错误,从.exe运行良好
- 包括 <iostream> => 成功的完整构建,但不包括.exe (Netbeans)
- Cmake构建失败,CMAKE_AR-NOTFOUND (cr exe未找到)
- 在Win10上使用Cygwin构建了exe,但关于kernel32.dll出现错误
- 我应该在哪里得到b2.exe和bjam.exe其他人都用来构建boost
- 如何将Python构建为c++ .exe