Один исполняемый файл для 32 и 64 бит (без WOW64) - PullRequest
3 голосов
/ 31 января 2010

Я пишу небольшую утилиту, которая должна работать в обеих 16 \ 32 \ 64-битных системах. Моя старая утилита работала как на 32, так и на 16 битах, сжимая 16-битную версию до 32 бит и применяя переключатель /stub в Visual Studio 2008 ( / STUB -MS-DOS Имя файла заглушки ).

Я ищу способ сделать то же самое с моим 64-битным исполняемым файлом. Целевая 64-битная система - Win PE 64-битная, на которой не установлен WOW64.

Возможно ли это?

Ответы [ 3 ]

3 голосов
/ 31 января 2010

Заглушка DOS исполняемых файлов Windows использует раздел MZ, тогда как 32-разрядные и 64-разрядные исполняемые файлы используют раздел PE. Это позволяет заглушке DOS существовать в любом исполняемом файле Windows, но вызывает конфликт при попытке объединить 32- и 64-разрядные исполняемые файлы.

2 голосов
/ 31 января 2010

Вы должны упаковать свой 32- и 64-битный утилит в ресурсы другого exe-файла, назовем его лаунчер 32-битным. Затем ваш модуль запуска должен определить, с какой системы он запущен, а затем извлечь из его ресурсов надлежащий двоичный файл и запустить его.

0 голосов
/ 01 февраля 2010

32-разрядная версия Windows запускает 16-разрядные приложения с помощью wowexec.exe, а Win64 запускает 32-разрядные приложения с помощью wow64. Поэтому без wow64 ваша программа не сможет создать универсальный лаунчер для Windows. (Примечание: Mac OSX в любом случае поддерживает множественную архитектуру в одном двоичном файле)

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

...