Как запустить exe-файл в 32-битном режиме на 64-битной машине?

Как запустить exe-файл в 32-битном режиме на 64-битной машине?

У меня есть исполняемый файл, который отлично работает в 32-битной версии Windows, но перестает работать в 64-битной версии Windows.

Есть ли способ заставить его работать в 32-битном режиме на 64-битной машине?

У меня нет доступа к исходному коду.

решение1

Насколько технический ответ вам нужен? Вероятно, вы можете заставить exe всегда работать в 32-битном режиме с помощью нескольких инструментов SDK, но это требует некоторой работы.

Самый простой ответ — запустить из 32-битного процесса (например, использовать %SystemRoot%\SYSWOW64\cmd.exeдля запуска).

Более сложным является проверка типа exe-файла, а затем его самостоятельное изменение. Предыстория здесь заключается в понимании того, что скомпилированный код из языков, которые напрямую работают с API Windows, создается разработчиком как 32- или 64-битный во время компиляции. Затем это нельзя изменить, не вернувшись к исходному коду.

Однако все больше приложений пишутся через слой виртуализации, что упрощает написание приложений. Есть два распространенных: .NET и Java. Я не уверен насчет Java, за исключением того, что принудительное включение правильной среды выполнения Java решает проблему.

Для .NET вы можете использовать инструменты SDK для:

  • Проверьте, что приложение — «AnyCPU»: corflags myExe.exe. Использование утилиты из .NET SDK для чтения заголовков сборки .NET для exe-файла вернет что-то вроде:
Версия: v4.0.30319
Заголовок CLR: 2.5
ПЭ : ПЭ32
CorFlags: 0x20003
ТОЛЬКО ILONLY: 1
32BITREQ : 0
32BITPREF : 1
Подписано: 0

мне 32BITREQговорят, что это AnyCPUпотому, что 32 бита не требуются.

  • Используйте corflagsэту /32BITREQ+опцию, чтобы сделать исполняемый файл только 32-битным.

решение2

Если у вас Windows 7 Professional (или выше), то используйте виртуальный режим 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-разрядного.

Связанный контент