У меня есть исполняемый файл, который отлично работает при запуске в 32-разрядных окнах, но ломается при запуске в 64-разрядных окнах.
Есть ли способ заставить его работать в 32-битном режиме на 64-битной машине?
У меня нет доступа к исходному коду.
Это не имеет особого смысла. Если в программном обеспечении нет некоторого кода, который явно делает его неудачным, если он не работает на 64-битной машине. 32-битная работает нормально на 64-битной, проблема возникает наоборот (64-битная на 32-битной). Вы получаете сообщение об ошибке?
Это код, который вы написали (в этом случае переполнение стека — это место для запроса — с кодом и сообщениями об ошибках), или вы запускаете чужую программу? Это поможет, если вы включите какие-либо сообщения об ошибках, которые вы получаете.
Насколько технический ответ вы хотите? Вероятно, вы можете заставить exe-файл всегда запускать 32-битную версию с помощью нескольких инструментов SDK, но это требует небольшой работы.
КАК 64 БИТНУЮ ИГРУ ЗАПУСТИТЬ НА 32 БИТНОЙ СИСТЕМЕ 2018
Простой ответ — запустить 32-битный процесс (например, использовать %SystemRoot%SYSWOW64cmd.exe для запуска).
Сложнее проверить, какой это exe-файл, а затем изменить его самостоятельно. Основой здесь является понимание того, что скомпилированный код из языков, которые напрямую работают с API-интерфейсами Windows, создается как 32-битный или 64-битный во время компиляции разработчиком. Это не может быть изменено без возврата к исходному коду.
Однако все чаще приложения пишутся через уровень виртуализации, который облегчает написание приложений. Есть два распространенных: .NET и Java. Я не уверен насчет Java, за исключением того, что знаю, что принудительная установка времени выполнения Java решит проблему.
Для .NET вы можете использовать инструменты SDK для:
- Подтвердить , что приложение «AnyCPU»: corflags myExe.exe . Используя утилиту из .NET SDK для чтения заголовков сборки .NET, exe вернет что-то вроде:
32BITREQ говорит мне , что это AnyCPU потому , что 32bit не требуется.
- Используйте corflags с его /32BITREQ+ опцией, чтобы изменить exe, чтобы быть только 32-битным.
+1 Настройка .Net AnyCPU была моей первой мыслью. Все, что требуется, — это неосведомленный программист, чтобы не указать этот параметр должным образом. Приятно слышать, что есть способ исправить это после компиляции.
Я попытался запустить его из, %SystemRoot%SYSWOW64cmd.exe и он потерпел неудачу таким же образом — показывая сообщение об ошибке — и когда я регистрируюсь в TaskManager, мой exe-процесс не отображается как 32-битный процесс
Как Дейв спросил выше, какое именно сообщение об ошибке вы получаете?
При запуске управляемого AnyCPU EXE SYSWOW64cmd.exe все еще он запускается как 64-битный процесс (я только что попробовал).
Если у вас Windows 7 Professional (или выше), то используйте режим виртуальной XP от Microsoft
это эмулирует (?) 32-битную среду и оказалось полезным для запуска некоторых старых 16-битных программ
Как поставить 32 битную систему на 64 битную в играх
Перепробовал все и ничего не получалось. но потом подумал о переносе каталога gta iv из файлов программы C / (x86) в файлы программы C /, и он работает, поскольку x86 предназначен для 32-битных приложений (я думаю), но все равно работает.
На самом деле есть более простой способ справиться с этим (не долгосрочное решение).
Удалите приложение «corflags.exe» в папку windows system32. Откройте командную строку как администратор и введите .
corflags «путь и имя exe» / 32BITPREF32 +
Это заставит приложение работать как 32-битный процесс вместо 64-битного.
Источник: qastack.ru
Запуск 32-разрядных приложений
WOW64 — это эмулятор x86, который позволяет 32-разрядным приложениям Windows легко работать в 64-разрядной версии Windows. Это позволяет 32-разрядным (x86) приложениям Windows легко работать в 64-разрядной версии (x64) Windows, а также для 32-разрядных (x86) и 32-разрядных (ARM) приложений Windows для эффективного выполнения в 64-разрядной (ARM64) Windows. WOW64 предоставляется вместе с операционной системой и не должен быть явно включен. Дополнительные сведения см. в разделе Сведения о реализации WOW64.
Система изолирует 32-разрядные приложения от 64-разрядных приложений, что включает предотвращение конфликтов файлов и реестров. Поддерживаются консоль, графический интерфейс и приложения-службы. Система обеспечивает взаимодействие через границу 32/64 для таких сценариев, как вырезания и вставки и COM.
Однако 32-разрядные процессы не могут загружать 64-разрядные библиотеки DLL для выполнения, а 64-разрядные процессы не могут загружать 32-разрядные библиотеки DLL для выполнения. Это ограничение не применяется к библиотекам DLL, загруженным в виде файлов данных или файлов ресурсов изображений. Дополнительные сведения см. в разделе LoadLibraryEx.
32-разрядное приложение может определить, выполняется ли оно в WOW64, вызывая функцию IsWow64Process (используйте IsWow64Process2, если оно предназначено для Windows 10). Приложение может получить дополнительные сведения о процессоре с помощью функции GetNativeSystemInfo .
Обратите внимание, что 64-разрядная версия Windows не поддерживает запуск 16-разрядных приложений windows. Основная причина заключается в том, что дескриптор имеет 32 значимых бита в 64-разрядной версии Windows. Таким образом, дескрипторы не могут быть усечены и переданы в 16-разрядные приложения без потери данных. Попытки запуска 16-разрядных приложений завершаются сбоем со следующей ошибкой: ERROR_BAD_EXE_FORMAT.
В этом разделе
- Производительность и потребление памяти в WOW64
- Сведения о реализации WOW64
- Перенаправитель реестра
- Перенаправитель файловой системы
- Управление памятью
- Соответствие процессоров
- Взаимодействие между процессами
- Установка приложения
- Отладка WOW64
Источник: learn.microsoft.com
Как мне запустить exe в 32-битном режиме на 64-битной машине?
У меня есть исполняемый файл, который отлично работает при запуске в 32-разрядных окнах, но ломается при запуске в 64-разрядных окнах. Есть ли способ заставить его работать в 32-битном режиме на 64-битной машине? У меня нет доступа к исходному коду.
изменён Dave 23k
задан Rory 938
4 ответа 4
- Проверьте, что приложение «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- битный .
ответ дан Richard 8k
Если у вас Windows 7 Professional (или выше), то используйте режим виртуальной XP от Microsoft
это подражает (?) 32-битная среда, и она оказалась полезной для запуска некоторых старых 16-битных программ
ответ дан SeanC 3k
Перепробовал все и ничего не получалось. но затем подумал о переносе каталога gta iv из файлов C/program (x86) в файлы C/program, и он работает, поскольку x86 предназначен для 32-битных приложений (я думаю), но все равно работает.
ответ дан mdb 1
На самом деле есть более простой способ справиться с этим (не долгосрочное решение).
Удалите приложение «corflags.exe» в папку windows system32. Откройте командную строку как администратор и введите .
corflags «путь и имя exe» /32BITPREF32+
Это заставит приложение работать как 32-битный процесс вместо 64-битного.
Источник: poweruser.guru