Wie man eine selbst-extrahierende Datei (Autoinstaller, Toolpaket, …) mit 7-Zip erstellt

Wie man eine selbst-extrahierende Datei (Autoinstaller, Toolpaket, …) mit 7-Zip erstellt

Nicht nur mit WinRar kann man leicht ein selbst-extrahierendes Archiv erstellen, das z. B. eine Batch-Datei aufruft und somit einfache Installer, kleine Toolpakete und ähnliches ermöglicht. Das gleiche bietet auch 7zip, viel weniger komfortabel, aber dafür ganz ähnlich mächtig.

Wer einen kostenfreien Entpacker sucht kommt schlecht an 7-Zip vorbei. 7-Zip ist dem ansonsten sehr guten WinRar meiner Meinung nach sehr ebenbürtig, und auf alle Fälle dem interessanterweise noch in vielen Firmen installierten WinZip (das eigentlich nur historisch bedingt eine Rolle spielt) haushoch überlegen.

Leider bietet 7-Zip jedoch von Hause aus keine ähnlich komfortable Möglichkeit wie WinRar, eine SFX Datei zu erstellen. Hier soll gezeigt werden, wie man ein einfaches Paket erstellen kann, und das mit relativ wenig Aufwand.

Voraussetzungen

Zunächst benötigt man natürlich 7-Zip. Daneben benötigen wir noch die passenden SFX Dateien für 7-Zip. (SFX steht für Self Extracting, selbst-extrahierend.) Diese installieren wir beide.
Mit 7-Zip wird später das Archiv erstellt, die SFX Dateien machen daraus dann eine ausführbare Datei (wir können sie also auch ohne installiertes 7-Zip entpacken/ausführen). Die Dokumentation findet sich verteilt online unter 7-Zip SFX, in recht gutem Englisch, sowie in der lokal installierten Hilfedatei, in sehr gebrochenem Englisch. Dafür gibt es lokal die „First Steps”, die sehr hilfreich sind.

Beispiel: Aufsetzen eines Tools zum Beenden und Starten eines Services

An einem einfachen Beispiel, einem Tool um WinVNC (den UltraVNC-Server Dienst) zu beenden und wieder zu starten, möchte ich dies demonstrieren.

Normalerweise läßt sich ein Service schön über eine Batchdatei beenden und auch wieder starten. Im Alltag schlägt dies jedoch immer mal wieder fehl, wenn ein Service aus dem einen oder anderen Grund sich doch nicht beendet.

Um sicherzugehen, daß der Service auch wirklich beendet wird (manchmal hängt ja etwas, oder jemand hat WinVNC von Hand gestartet), möchte ich zusätzlich den WinVNC Prozess noch einmal „killen” und greife dabei auf PsKill aus den PsTools von SysInternals/Microsoft zurück. Somit hätte ich jetzt also eine Batchdatei und zusätzlich noch ein Executable. Um die Verteilung auf andere Systeme leichter zu machen möchte ich beides in eine Datei packen. Damit ergibt sich das Problem, immer 2 Dateien mitschleppen zu müssen, die zudem auch noch im selben Ordner sein müssen, wo dann die richtige Datei gestartet werden muß. Sollte man damit einen Kollegen glücklich machen wollen, sind noch Erklärungen nötig. Das alles umgehen wir mit der einen Datei.

Die Batchdatei

Damit sieht unsere Batchdatei restart.bat dann folgendermaßen aus:

1
2
3
net stop uvnc_service
pskill winvnc.exe
net start uvnc_service

Die Namen der gewünschten Services lassen sich übrigens leicht in der Dienst-Übersicht von Windows finden, z. B. durch Eingabe von servics.msc aus der Kommandozeile. Der Prozessname findet sich dort ebenfalls, gegebenenfalls findet man diesen sonst auch im TaskManager – wenn man bereits grob weiß, wonach man sucht.

Was fehlt noch? Das Archiv, eine Konfigurationsdatei, sowie alles zusammen in einem Executable.

Das Archiv

Dem Archiv fügen wir nun alle gewünschten Dateien hinzu, in unserem Fall pskill.exe sowie restart.bat. Daraus erzeugen wir dann die restart.7z. Wichtig ist auch, daß wir die Kompressionsmethode LZMA verwenden – zumindest für dieses Tutorial, ansonsten können wir beliebige andere Module verwenden, für die wir auch entsprechende SFX-Pendants haben.

Die Konfigurationsdatei

Diese folgt einer speziellen Syntax von 7zip.

Die config.txt sieht dann so aus (weitere Beispiele finden sich in der Hilfe, s. o.):

1
2
3
4
5
;!@Install@!UTF-8!
RunProgram="restart.bat"
InstallPath="%TEMP%\restart"
GUIMode="2"
;!@InstallEnd@!

Hier wird 7zip (SFX) so konfiguriert, daß die Dateien nach %TEMP%/restart entpackt werden, und dort dann die restart.bat ausgeführt wird. Eine Abfrage erscheint nicht, nachher sollten die Dateien wieder gelöscht werden, wobei das bei mir nicht der Fall war.

Das Executable

Schließlich müssen wir die Dateien noch mit modernsten Mitteln – das haben wir sicher im Verlauf bereits gemerkt – zusammenfügen: mittels eines Windows-copy Befehls. Am besten haben wir hierfür alle Dateien – Archiv, .sfx Datei (aus dem SFX Toolkit) sowie Konfigurationsdatei – in einem Verzeichnis. Die Kommandozeile sieht dann so aus (evtl. vorher noch cd ins richtige Verzeichnis):

copy /b 7zsd_LZMA.sfx + config.txt + restart.7z restart.exe

Wichtig ist die /b Option, mit der wir sicherstellen, daß keine Zeichen (fälschlicherweise) als Text interpretiert werden, dadurch wäre dann die Zieldatei meistens defekt. Ferner sehen wir hier, warum wir in einem vorherigen Schritt LZMA ausgewählt haben (wobei natürlich auch andere passende Module gewählt werden können). Schließlich fügt der copy-Befehl alle Dateien in richtiger Reihenfolge in ein neues Executable zusammen, die von uns gewünschte ausführbare selbst-extrahierende Datei.

Fazit

Wir haben hier also nicht nur ein selbstextrahierendes Archiv erzeugt, sondern in dieses direkt eine Batchdatei eingefügt. Mit einem solchen Gefüge lassen sich jede Menge Probleme erschlagen, wie z. B. einfache Installer oder eben die Kombination von einer Batchdatei mit ein paar benötigten Programmen, komfortabel in einer Datei.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.