如何在64位机器上以32位模式运行exe?
我有一个可执行文件,在32位Windows上运行时工作正常,但在64位Windows上运行时就坏了。
有什么办法可以让它在64位机器上以32位模式运行?
我没有访问源代码的权限。
我有一个可执行文件,在32位Windows上运行时工作正常,但在64位Windows上运行时就坏了。
有什么办法可以让它在64位机器上以32位模式运行?
我没有访问源代码的权限。
你想要一个多么技术性的答案?你也许可以通过一些SDK工具强制exe始终运行在32位,但这确实需要一点工作。
简单的答案是从32位进程启动(例如,使用%SystemRoot%\SYSWOW64\cmd.exe
启动)。
比较复杂的是检查是什么类型的exe,然后自己修改。这里的背景是要明白,直接与Windows APIs工作的语言的编译代码在编译时被开发者创建为32bit或64bit。然后,如果不回到源代码中,就无法更改。
然而越来越多的应用程序是通过虚拟化层来编写的,这使得编写应用程序变得更加容易。常见的有两种:.NET和Java。我不清楚Java,只知道强制安装正确的Java运行时可以解决问题。
对于.NET,你可以使用SDK工具来。
验证应用程序是否为 “AnyCPU”: corflags myExe.exe
. 使用.NET SDK中的工具来读取.NET程序集的头,对于一个exe来说,会返回类似这样的结果:
验证应用程序是否为 “AnyCPU":32BITREQ
。
Version : v4.0.30319 CLR Header: 2.5 PE : PE32 CorFlags : 0x20003 ILONLY : 1 32BITREQ : 0 32BITPREF : 1 Signed : 0
AnyCPU
告诉我这是corflags
因为不需要32位。
/32BITREQ+
与其0x6&选项来修改exe,使其仅为32位。实际上有一个更简单的方法来适应这个问题(不是长期的解决方案)。
将应用程序 “corflags.exe "放到\windows\system32文件夹中。以管理员身份打开命令行并输入…
corflags "exe的路径和名称” /32BITPREF32+
这将迫使应用程序以32位进程的方式运行,而不是64位。