如何在 64 位机器上以 32 位模式运行 exe?

Ror*_*ory 20 windows 64-bit

我有一个可执行文件,在 32 位 Windows 上运行时可以正常工作,但在 64 位 Windows 上运行时会中断。

有什么方法可以强制它在 64 位机器上以 32 位模式运行吗?

我无权访问源代码。

Ric*_*ard 17

你想要什么样的技术答案?您可以使用一些 SDK 工具强制 exe 始终运行 32 位,但这确实需要一些工作。

简单的答案是从 32 位进程启动(例如%SystemRoot%\SYSWOW64\cmd.exe用于启动)。

比较复杂的就是检查一下是什么exe文件,然后自己修改。这里的背景是要了解,开发人员在编译时将直接使用 Windows API 的语言编译的代码创建为 32 位或 64 位。如果不返回源代码,则无法更改此设置。

然而,越来越多的应用程序是通过虚拟化层编写的,这使得编写应用程序变得更加容易。有两种常见的:.NET 和 Java。除了知道强制安装正确的 Java 运行时可以解决问题之外,我对 Java 不太确定。

对于 .NET,您可以使用 SDK 工具来:

  • 验证应用程序是“AnyCPU”: corflags myExe.exe。使用 .NET SDK 中的实用程序读取 .NET 程序集的标头,对于 exe 将返回如下内容:
版本:v4.0.30319
CLR 标头:2.5
聚乙烯:PE32
CorFlags:0x20003
国际:1
32BITREQ : 0
32BITPREF : 1
签名:0

32BITREQ告诉我,这是AnyCPU因为32位不是必需的。

  • 使用corflags它的/32BITREQ+选项将 exe 修改为仅 32 位。

  • 从“SYSWOW64\cmd.exe”启动托管 AnyCPU EXE 仍然会导致它作为 64 位进程运行(我刚刚尝试过)。 (6认同)
  • 我尝试从 `%SystemRoot%\SYSWOW64\cmd.exe` 启动它,但它以同样的方式失败 - 显示一条错误消息 - 当我检查 TaskManager 时,我的 exe 进程没有显示为 32 位进程 (3认同)