Има ли инструмент, който да комбинира 32-битово + 64-битово приложение и да ги опакова заедно в едно 32+64-битово приложение

В Windows 2008 R2 сървър (инсталация на ядрото на сървъра) wow64 вече не е задължителен компонент.

Мога да компилирам 32-битово приложение, използвайки същия изходен код като 64-битово приложение (с няколко ifdefs тук и там).

Има ли инструмент, който поставя двете версии на приложението ми в един изпълним файл, така че моето 32+64 битово приложение да работи на чист 32-битов Windows и само на 64-битов Windows?

Имайте предвид, че не говоря за пакет, защото самият пакет ще бъде 32 или 64 бита.


person Johan    schedule 07.10.2011    source източник
comment
Можете да напишете bootstrapper на .NET език. Поддържа AnyCPU като целева платформа. Използвайте IntPtr.Size, за да разберете каква битност имате.   -  person Hans Passant    schedule 08.10.2011
comment
@hans със сигурност AnyCPU разчита на WOW64   -  person David Heffernan    schedule 08.10.2011
comment
@David - не, само ако целта на платформата е принудена да x86.   -  person Hans Passant    schedule 08.10.2011
comment
Winzip/самоизвличане/32-битово приложение за стартиране на инсталиране стартира 32-битова или 64-битова инсталационна програма въз основа на версията на ОС   -  person Sheng Jiang 蒋晟    schedule 08.10.2011
comment
@sheng съжалявам, че точно това искам да избегна   -  person Johan    schedule 08.10.2011
comment
Вашият код трябва ли да работи на версии на Windows преди Windows 2008 R2 / Windows 7?   -  person Harry Johnston    schedule 08.10.2011
comment
@Hans И системата за зареждане случайно знае за тази измама и прави останалото. Звучи сякаш това е отговорът.   -  person David Heffernan    schedule 08.10.2011
comment
Windows не поддържа дебели приложения, така че няма начин да направите това без някакъв вид стартираща програма. Имате ли нужда bootstrapper да бъде един файл или може да бъде директория с run-me файл в нея?   -  person Harry Johnston    schedule 08.10.2011
comment
@Hans, .NET също няма да бъде наличен. В 2008 R2 това е ОК, защото поне част от .NET винаги ще присъства, но няма да работи на 2008.   -  person Harry Johnston    schedule 08.10.2011
comment
@HarryJohnston, Да, приложението трябва да работи поне на Windows XP.   -  person Johan    schedule 08.10.2011


Отговори (1)


Не. Заглавката на EXE е маркирана с процесорната архитектура, поддържана от кода, съдържащ се в EXE. Използвайте DUMPBIN.EXE -HEADERS, за да изследвате.

EXE докладва типа "машина" като: x86: 0x14C x64: 0x8664 ARM: 0x1C4

Ако искате да внедрите приложението си, изградете версия за x86, версия за x64 (ARM идва по-късно с Win8) и създайте пакет за настройка (MSI), който може динамично да изследва архитектурата на машината, на която инсталирате приложението и поставете едното или и двете приложения. Ето как, например, Adobe сега разпространява Flash x86 и Flash x64 в последното изтегляне на Flash player.

Ако искате да създадете наистина универсален двоичен файл, изградете го в .NET и го маркирайте като насочен към „Всеки“ процесор. След това вашето приложение ще бъде JITted към архитектурата на вашата машина (или процеса на хостване в случай на компонент за добавка).

person Rich Turner    schedule 07.10.2011
comment
Разбира се, това БЕШЕ възможно последния път... PE форматът включва поле за 16-битова входна точка в DOS режим... което по подразбиране беше пълно с мъниче, което отпечатва Това приложение не може да се изпълнява в DOS режим. но може да бъде заменен с 16-битовата версия на приложението. Жалко, че не го направиха отново. - person Ben Voigt; 08.10.2011
comment
За съжаление .NET също не е универсално достъпен, поне не и преди Windows 7/2008R2. - person Harry Johnston; 08.10.2011
comment
@Ben Voigt: Всъщност беше възможно само преди два рунда (DOS+Win16 binary). Не можете да пакетирате двоичен файл Win16+Win32 или двоичен файл Win32+Win64. - person Raymond Chen; 08.10.2011
comment
По принцип мисля, че би трябвало да е възможно да напишете пакет на Windows Installer (MSI файл), който разопакова и изпълнява подходящата версия на вашето приложение, вместо да го инсталира. Мисля, че това е толкова близо, колкото ще стигнете до универсален двоичен файл, който ще работи на всички XP+ системи. Ще трябва обаче да работите в рамките на спецификацията на Windows Installer 2.0, защото това може да е всичко, което имате. - person Harry Johnston; 09.10.2011