У меня есть исполняемый файл, который отлично работает в 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-разрядного.