我的版本.exe无法在其他电脑上运行

My Release .exe Cant Run on Other PCs

本文关键字:其他 电脑 运行 版本 exe 我的      更新时间:2023-10-16

我有一个用Visual Studio 2008 C++制作的小程序,它基本上创建和修改简单的文本文件。我不会在这里复制代码,但如果有人想看看:www.joggingbenefits.net/hcode.txt

我的问题是 - 我想从这段代码中创建一个.exe,它可以在其他不一定安装Visual Studio或redist软件包的Windows PC上运行。

到目前为止我尝试过:

  • 将项目配置从"调试"更改为"发布"
  • 在所有 4 个提供的运行时库之间切换(在代码生成下)
  • 将生成的每个.exe保存在我的"发布目录"中
  • 尝试在没有安装Visual Studio的PC上运行其中的每一个,并且它们都不起作用...它只运行了大约半秒钟,然后就消失了。

不确定我做错了什么,我一定在这里错过了一些非常重要的东西......回顾一下:我确实将编译模式更改为发布,并且我确实尝试更改运行时库,静态/动态库,但生成的 exe 都无法运行......

PS - 这些程序都以管理员身份运行,并禁用了防病毒软件等,所以事实并非如此。另外,我没有链接到任何DLL,所有包含的库都是标准的。

知道吗?

在非工作系统上使用 DependencyWalker 打开.exe。它将显示缺少哪些DLL(通常是一些VS2008运行时)。

此外,在 Windows 事件管理器中的错误下,当您尝试运行应用程序时,您还应该获得错误描述,了解它遗漏了什么。当您知道丢失了什么文件时,您可以谷歌它,并检查它去什么可再发行。

您已经创建了一个命令行程序。当 Windows 打开此程序时,它会为输入和输出创建一个命令窗口,程序完成后,它会立即关闭窗口。

如果打开自己的命令窗口并从那里运行它,则程序完成时窗口不会关闭。

如果您仍然希望程序直接运行但看到输出,则可以在程序末尾添加暂停。

cout << "Please type any key to finish" << endl;
char ch;
cin >> ch;

尝试访问"代码生成"属性页,并确保运行时库读取/MT 或/MTd 而不读取其他任何内容(尤其是/clr)。对项目进行干净构建,并确保输出状态为/MTd 并且 IDE 未注入任何其他冲突标志。我对VS2010没有太多经验,但这就是我对2008所做的一切。

除了其他人提到的DependencyWalker技巧(值得先做),我还建议在目标PC上临时安装Windows调试工具(这只是一个小安装)。 运行windbg并选择File -> Open Executable然后使用 F5 运行。 当应用程序爆炸时,您将获得更有意义的解释,说明它在错误消息和调用堆栈方面出错的地方。 我的猜测是缺少dll,或者可能与您自己系统上的不同版本的dll发生冲突。

您可以使用DependencyWalker执行的另一件有用的事情是在目标PC上运行它并选择Profile选项,这将在搜索dll时为您提供大量信息。

请注意,这两种方法都需要您在目标PC上安装某些东西,但这只是暂时的,如果不这样做,您只会猜测为什么会出错。

尝试在可执行文件不起作用的计算机上安装"Microsoft Visual C++ 2010 可再发行组件包"。