2009-07-23 7 views
7

Ich mag die Art und Weise, wie die Dienstprogramme von SysInternals (z. B. Process Explorer) 64-Bit-Kompatibilität verarbeiten. Es sieht so aus, als ob die ausführbare 32-Bit-Version die 64-Bit-Version enthält und diese bei Bedarf extrahiert.Gibt es irgendwelche Werkzeuge, um 32-/64-Bit-Executables zusammen zu packen?

Ich möchte ein Werkzeug, das dies automatisiert - d. H. Nimmt 32bit und 64bit ausführbare Dateien, packt sie irgendwie zusammen und fügt Stubcode ein, um die richtige ausführbare Datei zu starten, auf welcher Plattform sie ausgeführt wird.

Bevor ich anfange, mein eigenes zu rollen, weiß jemand von etwas ähnlichem, das bereits existiert?

+0

Niemand war in der Lage, ein Verpackungswerkzeug zu identifizieren, das dies tut, also habe ich die Antwort akzeptiert, die ich am nützlichsten fand. – snowcrash09

Antwort

2

Mark Russinovich von SysInternals Ruhm beschreibt ihre Methode here. Sie betten ein x64-Bild in ein x86-Bild ein. Leider geht der obige Blogpost nicht wirklich ins Detail, sondern erwähnt, dass ihre Technik auf einem viel älteren Artikel beruht, der gefunden wurde here.

2

kein Werkzeug (obwohl es auf Detail ziemlich flach ist), aber es scheint ziemlich einfach ausführbaren Dateien in einem VC++ Projekt einzubetten als Ressourcen und führen Sie die richtige nach dem Überprüfen der Betriebssystemumgebung aus.

Verwenden Sie die IsWow64Process-Funktion, um 32 oder 64 Bit zu erkennen, und hier ist eine nette Beschreibung einschließlich Quellcode zum Einbetten der ausführbaren Dateien: http://www.codeproject.com/KB/winsdk/binaryresources.aspx.

2

Während dies möglich ist, würde ich es als eine schlechte Praxis betrachten, da die meisten dieser Anwendungen (z. B. Process Explorer) diese Datei im Arbeitsverzeichnis extrahieren. Wenn Sie Programme in den Ordner "Program Files" stellen möchten, stößt dies gegen das Verzeichnis, das schreibgeschützt ist.

Für mich scheint es einfacher, zwei Programme getrennt zu haben und Verknüpfung nur zu x86-Datei zu machen. Wenn diese Version 64 Bit erkennt, muss sie nur die x64-Datei starten.

Wenn Sie wirklich guten Grund haben, diese beiden zu kombinieren, dann scheint es, als ob Sie es als Ressource einbetten, wie ein korrekter Pfad.

0

Here is a guide zu kompilieren ein AutoIT Skript, das den Job erledigt, obwohl Sie keine Kontrolle darüber haben, wie die Verpackung & Stub Launcher funktioniert.

Ich werde das AutoIT Skript hier im Fall reproduziert die Verbindung verschwindet:

; 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 

Dieses Skript kann in sie verpackt mit zwei ausführbaren Dateien vom AutoIT Script-Editor in 32bit Launcher gewickelt werden.