2009-07-23 7 views
7

Mi piace molto il modo in cui le utilità SysInternals (ad esempio Process Explorer) gestiscono la compatibilità a 64 bit. Sembra che l'eseguibile a 32 bit abbia la versione a 64 bit incorporata e lo estrae se necessario.Tutti gli strumenti disponibili per il confezionamento di file eseguibili a 32 bit/64 bit insieme?

Mi piacerebbe uno strumento che lo automatizzi, ovvero accetta eseguibili a 32 bit e 64 bit, li riunisce in qualche modo e inserisce il codice stub per avviare l'eseguibile corretto in base alla piattaforma su cui viene eseguito.

Prima di iniziare a lanciare da solo, qualcuno sa di qualcosa del genere che esiste già?

+0

Nessuno è stato in grado di identificare uno strumento di imballaggio che lo faccia, quindi ho accettato la risposta che ho trovato più utile. – snowcrash09

risposta

2

Mark Russinovich di fama SysInternals descrive il loro metodo here. Incorporano un'immagine x64 in un'immagine x86. Sfortunatamente il post sul blog non entra troppo nel dettaglio, ma menziona che la loro tecnica si basa su un articolo molto più vecchio trovato here.

2
Non

uno strumento, ma sembra abbastanza facile da incorporare le eseguibili in un progetto di VC++ come risorse ed eseguire quello corretto dopo aver controllato l'ambiente del SO.

Utilizzare la funzione IsWow64Process per rilevare 32 o 64 bit, ed ecco una bella correzione incluso il codice sorgente su come incorporare gli eseguibili: http://www.codeproject.com/KB/winsdk/binaryresources.aspx.

2

Sebbene ciò sia possibile, lo considero una cattiva pratica dal momento che la maggior parte di tali applicazioni (ad esempio Process Explorer) estrae tale file nella directory di lavoro. Se ti piace mettere i programmi nella cartella "Programmi", che si scontra con quella directory di sola lettura.

Per me sembra più semplice avere due programmi separati e creare un collegamento solo per il file x86. Se quella versione rileva 64 bit, deve solo avviare il file x64.

Se si ha davvero un buon motivo per combinare questi due, piuttosto che incorporarli come risorsa sembra un percorso corretto.

0

Here is a guide per la compilazione di uno script AutoIT che fa il lavoro, anche se non si ha alcun controllo su come funziona il confezionamento & stub launcher.

ho riprodurrà lo script AutoIt qui nel caso in cui il collegamento scompare:

; Check if we’re on 64-bit OS… 
If EnvGet(“PROCESSOR_ARCHITEW6432″)=”” Then 
    ; No we’re not – run x86 version… 
    FileInstall(“D:\Support\ETrustCheck_x86.exe”,@TempDir & “\ETrustCheck_x86.exe”) 
    RunWait(“D:\Support\ETrustCheck_x86.exe”,@TempDir & “\ETrustCheck_x86.exe”) 
    FileDelete(@TempDir & “\ETrustCheck_x86.exe”) 
Else 
    ; Yes we are – run x64 version.. 
    FileInstall(“D:\Support\ETrustCheck_x64.exe”,@TempDir & “\ETrustCheck_x64.exe”) 
    RunWait(“D:\Support\ETrustCheck_x86.exe”,@TempDir & “\ETrustCheck_x64.exe”) 
    FileDelete(@TempDir & “\ETrustCheck_x64.exe”) 
EndIf 

; The END 

Questo script può essere avvolto dal editor di script AutoIt in 32bit lanciatore con i tuoi due eseguibili imballati in esso.

Problemi correlati