17

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

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

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

4 ответа4

16

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

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

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

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

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

  • Проверьте, что приложение "AnyCPU": corflags myExe.exe . Используя утилиту из .NET SDK для чтения заголовков сборки .NET, exe вернет что-то вроде:
Version   : v4.0.30319
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x20003
ILONLY    : 1
32BITREQ  : 0
32BITPREF : 1
Signed    : 0

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

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

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

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

0

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

0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .