У меня есть исполняемый файл, который отлично работает при запуске в 32-разрядных окнах, но ломается при запуске в 64-разрядных окнах.
Есть ли способ заставить его работать в 32-битном режиме на 64-битной машине?
У меня нет доступа к исходному коду.
У меня есть исполняемый файл, который отлично работает при запуске в 32-разрядных окнах, но ломается при запуске в 64-разрядных окнах.
Есть ли способ заставить его работать в 32-битном режиме на 64-битной машине?
У меня нет доступа к исходному коду.
Ответы:
Насколько технический ответ вы хотите? Вероятно, вы можете заставить exe-файл всегда запускать 32-битную версию с помощью нескольких инструментов SDK, но это требует небольшой работы.
Простой ответ - запустить 32-битный процесс (например, использовать %SystemRoot%\SYSWOW64\cmd.exeдля запуска).
Сложнее проверить, какой это exe-файл, а затем изменить его самостоятельно. Основой здесь является понимание того, что скомпилированный код из языков, которые напрямую работают с API-интерфейсами Windows, создается как 32-битный или 64-битный во время компиляции разработчиком. Это не может быть изменено без возврата к исходному коду.
Однако все чаще приложения пишутся через уровень виртуализации, который облегчает написание приложений. Есть два распространенных: .NET и Java. Я не уверен насчет Java, за исключением того, что знаю, что принудительная установка времени выполнения Java решит проблему.
Для .NET вы можете использовать инструменты SDK для:
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-битным.%SystemRoot%\SYSWOW64\cmd.exeи он потерпел неудачу таким же образом - показывая сообщение об ошибке - и когда я регистрируюсь в TaskManager, мой exe-процесс не отображается как 32-битный процесс
SYSWOW64\cmd.exeвсе еще он запускается как 64-битный процесс (я только что попробовал).
На самом деле есть более простой способ справиться с этим (не долгосрочное решение).
Удалите приложение "corflags.exe" в папку \ windows \ system32. Откройте командную строку как администратор и введите ...
corflags "путь и имя exe" / 32BITPREF32 +
Это заставит приложение работать как 32-битный процесс вместо 64-битного.