我有一个可执行文件,在 32 位 Windows 上运行时运行良好,但在 64 位 Windows 上运行时就会崩溃。
有什么方法可以强制它在 64 位机器上以 32 位模式运行?
我无法访问源代码。
答案1
您想要一个多技术性的答案?您可能可以使用一些 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 内核标志:0x20003 仅限:1 32位请求: 0 32 位参考: 1 已签名:0
它32BITREQ
告诉我这是AnyCPU
因为不需要 32 位。
- 使用
corflags
其/32BITREQ+
选项将 exe 修改为仅 32 位。
答案2
如果你有 Windows 7 专业版(或更高版本),那么使用虚拟 XP 模式微软
这模拟了 32 位环境,并且已被证明对于运行一些旧的 16 位程序很有用
答案3
尝试了所有方法,但都没有用。但后来考虑将 gta iv 目录从 C/program files(x86) 移动到 C/program files,这样就可以了,因为 x86 适用于 32 位应用程序(我认为),但无论如何都可以。
答案4
实际上有一种更简单的方法来解决这个问题(不是长期的解决方案)。
将应用程序“corflags.exe”放入 \windows\system32 文件夹。以管理员身份打开命令行并输入...
corflags“exe 的路径和名称”/32BITPREF32+
这将强制应用程序作为 32 位进程而不是 64 位进程运行。