17. Juni 2011

Ein einfacher EXE Binder mit 7-Zip

Heute geht es um einen einfachen kostenlosen EXE-Binder. Um nun zu erklären, was das ist und wofür man das braucht, ein wenig Einführung:
portable Programme benutzen sicherlich viele von euch. Vielleicht hat der eine oder andere sogar mal eines selbst erstellt. Neben kommerziellen Programme, wie VMware Thinapp (habe ich selbst mal getestet, ist echt klasse), gibt es mittlerweile sogar Freeware zum Erstellen von portablen Programmen. Manchmal gibt es dabei jedoch Probleme: während der Laufzeit des portablen Programms wird irgendwelcher Müll erstellt oder in die Registry geschrieben. Dieser Müll kann aus unerklärlichen Gründen erst nach Beendigung des portablen Programms gelöscht werden. Oder vor dem Start des portablen Programms muss noch ein weiteres Programm geöffnet werden.
Wie auch immer... man benötigt also einen Art Launcher, den man um die portable EXE herumbasteln muss (z.B. mit Autohotkey). Dummerweise hat man dann 2 Executables. Eigentlich wollte man aber nur ->eine<- Datei haben.
Die Lösung für dieses Problem ist ein EXE Wrapper oder EXE Binder. Dabei handelt es sich um einen Laufzeitpacker, der mit den 2 anderen Executables zu einer einzigen ausführbaren Datei verwurstet wird.
Startet man diese ausführbare Datei, wird der Laufzeitpacker aktiv. Dieser entpackt die 2 Executables (also der Launcher und unser portables Programm) und führt dann den Launcher aus usw.
Schließt man später wieder das portable Programm, sollte der Laufzeitpacker am Ende noch aufräumen und die entpackten Dateien löschen.
Klingt kompliziert, ist es aber nicht (eigentlich).

Wofür könnte man einen EXE Binder noch brauchen? - Beispiel: man hat bereits ein Programm, dass portabel läuft aber aus mehreren Dateien und Unterordnern besteht. Mittels eines EXE Binders kann man die ganzen Dateien zu einer Datei zusammenfügen. Im Unterschied zu einem "normalen" SFX-Archiv wird automatisch das gepackte Programm nach dem Entpacken gestartet UND danach die entpackten Daten automatisch gelöscht.

Nun die Frage: wie geht das? - Obwohl ich ein großer Fan von Winrar bin, brauchen wir hierfür tatsächlich 7-Zip.
  1. 7 Zip oder 7 Zip portable laden.
  2. von http://www.7-zip.org/download.html die 7z Library mit den SFX files laden.
  3. das Programm ( = die 2 Executables oder das zu komprimierende Programm) mit 7 Zip packen. WICHTIG: nur als 7z-Archiv packen, NICHT als sfx! Empfehlung: Als Kompressionsstufe "store" einstellen, sonst dauert das Starten später lange. Das Archiv sollte keine Leerzeichen enthalten. (Empfehlung 2: die Dateien nicht einfach lose packen sondern vorher in einen Ordner verschieben und den kompletten Ordner packen. Dann muss jedoch auch der Pfad in der config.txt angepasst werden; Details dazu in der Doku des SFX-Moduls nachlesen!)
  4. die Datei 7zS.sfx aus der 7z Library entpacken in den Ordner des erstellten Archivs kopieren
  5. im Ordner des Archivs die Datei config.txt erstellen
  6. die config.txt öffnen und Folgendes reinkopieren
    ;!@Install@!UTF-8!
    RunProgram="launch.exe"
    GUIMode="1"
    ;!@InstallEnd@!
  7. Datei speichern und schließen.
  8. eine Konsole öffnen und Folgendes eingeben (der Name des Archivs muss entsprechend angepasst werden):
    copy /b 7zS.sfx + config.txt + archiv.7z archive.exe

  9. Fertig!
Eigentlich sollte man dazu mal ein kleines Script schreiben, da dieses Vorgehen zwar einfach aber tendenziell nervig ist.
Wem die Anleitung zu kurz ist, kann hier noch mal nachschauen. Wer wissen will, wass die Befehle in der config.txt bedeuten oder wie man das Ganze noch ein wenig aufbohren kann, sollte sich die Dokumentation zu der 7zS.sfx anschauen.

Keine Kommentare: