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


18

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

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

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


Это не имеет особого смысла. Если в программном обеспечении нет некоторого кода, который явно делает его неудачным, если он не работает на 64-битной машине. 32-битная работает нормально на 64-битной, проблема возникает наоборот (64-битная на 32-битной). Вы получаете сообщение об ошибке?
Дэйв

3
Это код, который вы написали (в этом случае переполнение стека - это место для запроса - с кодом и сообщениями об ошибках), или вы запускаете чужую программу? Это поможет, если вы включите какие-либо сообщения об ошибках, которые вы получаете.
ChrisF

Ответы:


16

Насколько технический ответ вы хотите? Вероятно, вы можете заставить 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
PE: PE32
CorFlags: 0x20003
ILONLY: 1
32BITREQ: 0
32BITPREF: 1
Подписано: 0

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

  • Используйте corflagsс его /32BITREQ+опцией, чтобы изменить exe, чтобы быть только 32-битным.

+1 Настройка .Net AnyCPU была моей первой мыслью. Все, что требуется, - это неосведомленный программист, чтобы не указать этот параметр должным образом. Приятно слышать, что есть способ исправить это после компиляции.
Hand-E-Food

2
Я попытался запустить его из, %SystemRoot%\SYSWOW64\cmd.exeи он потерпел неудачу таким же образом - показывая сообщение об ошибке - и когда я регистрируюсь в TaskManager, мой exe-процесс не отображается как 32-битный процесс
Rory

1
Как Дейв спросил выше, какое именно сообщение об ошибке вы получаете?
Каран

5
При запуске управляемого AnyCPU EXE SYSWOW64\cmd.exeвсе еще он запускается как 64-битный процесс (я только что попробовал).
Карл Уолш

3

Если у вас Windows 7 Professional (или выше), то используйте режим виртуальной XP от Microsoft

это эмулирует (?) 32-битную среду и оказалось полезным для запуска некоторых старых 16-битных программ


0

Перепробовал все и ничего не получалось. но потом подумал о переносе каталога gta iv из файлов программы C / (x86) в файлы программы C /, и он работает, поскольку x86 предназначен для 32-битных приложений (я думаю), но все равно работает.


0

На самом деле есть более простой способ справиться с этим (не долгосрочное решение).

Удалите приложение "corflags.exe" в папку \ windows \ system32. Откройте командную строку как администратор и введите ...

corflags "путь и имя exe" / 32BITPREF32 +

Это заставит приложение работать как 32-битный процесс вместо 64-битного.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.