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


18

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

有什么办法可以迫使它在64位计算机上以32位模式运行?

我无权访问源代码。


这没有多大意义。除非该软件具有某些代码,否则如果不能在64位计算机上运行,​​则该代码会明确使其失败。32位可以在64位上正常运行,反之则是相反的问题(在32位上运行64位)。您是否收到错误消息?
戴夫

3
是您编写的此代码(在这种情况下,应使用堆栈溢出功能-带代码和错误消息),或者您正在运行的是别人的程序?如果您包括收到的任何错误消息,这将有所帮助。
克里斯·弗里德(ChrisF)2012年

Answers:


16

您想要一个技术性的答案吗?您可能可以通过一些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
PE:PE32
CorFlags:0x20003
ILONLY:1
32位请求:0
32BITPREF:1
签名:0

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

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

+1 .Net AnyCPU设置是我的第一个想法。所要做的只是一个没有意识到的程序员,无法正确指定此设置。很高兴听到在编译后有一种方法可以修复它。
Hand-E-Food

2
我尝试从中启动它,%SystemRoot%\SYSWOW64\cmd.exe并且以相同的方式失败-显示错误消息-当我在TaskManager中签入时,我的exe进程未显示为32位进程
Rory

1
正如戴夫(Dave)上文所述,您会得到什么确切的错误消息?
卡兰2012年

5
从中启动托管的AnyCPU EXE SYSWOW64\cmd.exe仍然会使它作为64位进程运行(我刚刚尝试过)。
卡尔·沃尔什

3

如果您具有Windows 7 Professional(或更高版本),请使用Microsoft的虚拟XP模式

它模拟(?)32位环境,并且对于使某些旧的16位程序运行非常有用


0

尝试了一切,没有任何效果。但是后来考虑将gta iv目录从C /程序文件(x86)移到C /程序文件,并且由于x86适用于32位应用程序而工作了(我认为),但是无论如何都可以工作。


0

实际上,有一种更简便的方法来解决此问题(不是长期解决方案)。

将应用程序“ corflags.exe”拖放到\ windows \ system32文件夹中。以管理员身份打开命令行并输入...

标记“ exe的路径和名称” / 32BITPREF32 +

这将强制应用程序以32位进程而不是64位进程运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.