Ist es möglich, eine Datei nach dem Extrahieren aus einem 7-Zip-Archiv (SFX) auszuführen?

40

Ich versuche, eine komprimierte bereitstellbare Anwendung zu erstellen.

Momentan nehme ich eine Reihe von Dateien, die ich aus meiner IDE (von Visual Studio 2008 - WPF veröffentlichte Anwendung) veröffentlicht habe, und komprimiere sie in einem 7-Zip-SFX-Archiv.

Meine Benutzer haben gefragt, ob sie "Ein-Klick-Installation" von der 7-Zip-Exe können. Beim Erstellen des Archivs wird eine Parameterliste angezeigt. Gibt es eine Möglichkeit, eine Kombination von Parametern festzulegen, um die ausführbare Datei des Installationsprogramms aufzurufen, die extrahiert wird?

Leider scheint die 7-Zip-Dokumentation dieses Szenario nicht abzudecken. Ich habe mehrere kostenpflichtige Anwendungen gesehen, die etwas Ähnliches tun, aber ich versuche, das Tool, das ich schreibe, frei von lizenziertem Code zu halten, damit wir es intern verwenden können.

Mike G
quelle
Könnten Sie auf jemanden verweisen, der bezahlt hat?
abhishek77in

Antworten:

35

Sie müssen das LMZA SDK von 7-Zip herunterladen . Die Datei "installer.txt" enthält Dokumentation:

7zSD.sfx ist ein SFX-Modul für Installateure. 7zSD.sfx verwendet msvcrt.dll.

SFX-Module für Installer ermöglichen das Erstellen von Installationsprogrammen. Ein solches Modul extrahiert das Archiv in einen temporären Ordner und führt dann das angegebene Programm aus und entfernt temporäre Dateien nach Beendigung des Programms. Selbstentpackendes Archiv für Installer muss als Verknüpfung von 3 Dateien erstellt werden: SFX_Module, Installer_Config, 7z_Archive. Installer_Config ist eine optionale Datei. Mit dem folgenden Befehl können Sie ein selbstextrahierendes Installationsarchiv erstellen:

copy /b 7zSD.sfx + config.txt + archive.7z archive.exe

Sie müssen eine config.txt-Datei erstellen.

Die Konfigurationsdatei enthält Befehle für den Installer. Die Datei beginnt mit einem String ;!@Install@!UTF-8!und endet mit ;!@InstallEnd@!. Die Datei muss in UTF-8-Codierung geschrieben sein. Datei enthält Zeichenfolgenpaare:

ID_String = "Wert"

Title Titel für Nachrichten

BeginPrompt Ansage starten

ProgressDer Wert kann "Ja" oder "Nein" sein. Der Standardwert ist "yes".

RunProgramBefehl zum Ausführen. Der Standardwert ist "setup.exe". Der Teilstring %% T wird durch den Pfad zum temporären Ordner ersetzt, in den die Dateien extrahiert wurden

DirectoryVerzeichnispräfix für "RunProgram". Standardwert ist ". \"

ExecuteFile Name der auszuführenden Datei

ExecuteParameters Parameter für "ExecuteFile"

Beispielsweise:

 ;!@Install@!UTF-8!
 Title="7-Zip 4.00"
 BeginPrompt="Do you want to install the 7-Zip 4.00?"
 RunProgram="setup.exe"
 ;!@InstallEnd@!
Jason
quelle
1
Ja. Ich habe es versucht Ein bisschen unangenehm, denn alles ist eine Befehlszeile, aber Sie werden eine gute Dokumentation dafür finden. Und ich bekomme die beste Komprimierung, die es kostenlos gibt.
Ganesh R.
@ MikeG - Dieser Link ist viel gründlicher. Es wurde erklärt, wie der Dekomprimierungsabschnitt vollständig transparent gemacht wird. Sehr schön danke!
Namuol
5
Beachten Sie, dass die "SFX-Module in das LZMA SDK-Paket" (verfügbar auf 7-zip.org ) ab Version 9.35 Beta verschoben wurden .
Lukas
21

Die vereinbarte Lösung ist richtig, hilft aber nicht, zu erklären, was Sie tatsächlich tun müssen !. Ich habe diese und viele andere Lösungen gelesen und konnte keine vollständigen und einfachen Anweisungen dazu finden.

Wenn Sie genauso verwirrt sind wie ich, lesen Sie bitte meinen Blog-Beitrag, in dem Sie Schritt für Schritt erfahren, wie Sie das erreichen, was Molly7244 veröffentlicht hat.

So erstellen Sie ein selbstextrahierendes Archiv, in dem Ihre setup.exe mit dem Schalter 7zip -sfx ausgeführt wird

Ich wurde darauf aufmerksam gemacht, dass Links nicht mehr funktionieren können. Hier sind die Schritte aus meinem Blog

Schritt 1 - Richten Sie Ihren Installationsordner ein

Um dies zu vereinfachen, erstellen Sie einen Ordner c: \ Install. Hier kopieren wir alle benötigten Dateien.

Schritt 2 - 7Zippen Sie Ihre Installationsprogramme

  1. Wechseln Sie zu dem Ordner, in dem sich Ihre .msi-Datei und Ihre setup.exe befinden
  2. Wählen Sie sowohl die MSI-Datei als auch die Datei setup.exe aus
  3. Rechtsklicke und wähle 7Zip -> "Zum Archiv hinzufügen"
  4. Nennen Sie Ihr Archiv "Installer.7z" (oder einen Namen Ihrer Wahl)
  5. OK klicken
  6. Sie sollten jetzt "Installer.7z" haben.
  7. Kopieren Sie diese .7z-Datei in Ihr Verzeichnis c: \ Install

Schritt 3 - Holen Sie sich das 7z-Extra sfx-Erweiterungsmodul

Sie müssen das 7z-Extra herunterladen.

  1. Folgen Sie diesem Link, um 7Zip herunterzuladen
  2. Sie müssen die Version 9.20 (Stand: Mai 2015) herunterladen, da die Beta nicht die richtigen Dateien enthält.
  3. Ein direkter Download- Link.
  4. Extrahieren Sie die zusätzlichen 7zip-Dateien
  5. Kopieren Sie die Datei "7zS.sfx" nach c: \ Install

Schritt 4 - Richten Sie Ihre config.txt ein

Ich würde empfehlen, NotePad ++ zu verwenden, um diese Textdatei zu bearbeiten, da Sie in UTF-8 codieren müssen. Die folgenden Anweisungen verwenden Notepad ++.

  1. Gehen Sie im Windows Explorer zu c: \ Install
  2. Klicken Sie mit der rechten Maustaste und wählen Sie "New Text File" und nennen Sie es config.txt
  3. Klicken Sie mit der rechten Maustaste und wählen Sie "Bearbeiten mit NotePad ++"
  4. Klicke auf "Encoding Menu" und wähle "Encode in UTF-8"
  5. Geben Sie so etwas ein:

    ;!@Install@!UTF-8!
    Title="SOFTWARE v1.0.0.0"
    BeginPrompt="Do you want to install SOFTWARE v1.0.0.0?"
    RunProgram="setup.exe"
    ;!@InstallEnd@!
    

Bearbeiten Sie dies, indem Sie [SOFTWARE v1.0.0.0] durch Ihren Produktnamen ersetzen. Hinweise zu den Parametern und Optionen für die Setup-Datei finden Sie hier

Kontrollpunkt

Sie sollten jetzt einen Ordner "c: \ Install" mit den folgenden 3 Dateien haben:

  1. Installer.7z
  2. 7zS.sfx
  3. config.txt

Schritt 5 - Erstellen Sie das Archiv

Diese Anweisungen habe ich im Internet gefunden, aber nirgends wurden die 4 oben genannten Schritte erklärt.

  1. Öffnen Sie ein Cmd-Fenster, Fenster + R -> Cmd -> drücken Sie die Eingabetaste
  2. Geben Sie im Befehlsfenster Folgendes ein

    cd \
    cd Install
    copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe
    
  3. Schauen Sie in c: \ Install nach und Sie werden sehen, dass Sie eine MyInstaller.exe haben

  4. Du bist fertig

Führen Sie das Installationsprogramm aus

Doppelklicken Sie auf MyInstaller.exe und es wird mit Ihrer Nachricht aufgefordert. Klicken Sie auf OK und die setup.exe wird ausgeführt.

PS Hinweis zur Automatisierung

Jetzt, da Sie dies in Ihrem c: \ Install-Verzeichnis haben, würde ich eine "Install.bat" -Datei erstellen und das Kopierskript darin einfügen.

copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe

Jetzt können Sie die Datei Install.bat einfach jedes Mal bearbeiten und ausführen, wenn Sie eine neue Version Ihres Bereitstellungspakets erstellen müssen.

jcrawfor74
quelle
2
Dies sollte die akzeptierte Antwort sein!
Noelicus
Ist es möglich, ein Befehlszeilenargument an das ExecuteParametersElement in zu übergeben config.txt? Zum Beispiel: C:\Install\MyInstaller.exe some_file.txt würde ausführen setup.exe some_file.txt.
Donnerstag,
Ja ist es. Wie Matthew-Lundberg in seiner Antwort sagte : "Argumente, die an die ausführbare Datei von SFX übergeben werden, werden an das Skript Install.cmd weitergeleitet"
Uhr
8

Sie sollten sich auch NSIS ansehen . Damit können Sie ein Installationsprogramm erstellen, das mit der gleichen Methode komprimiert wird, die 7-Zip verwendet ( LZMA ). Daher sollte es ungefähr dieselbe Größe haben und Sie haben die volle Kontrolle über den Installationsprozess.

Matthew Talbert
quelle
2

Aufbauend auf der Antwort von jcrawfor74 finden Sie hier einige zusätzliche Informationen:

Anstelle von 7zS.sfx können Sie auch die Datei 7zS2.sfx verwenden . Dies ist eine viel kleinere Version (28 kB gegenüber 140 kB), die config.txt-Datei wird jedoch nicht unterstützt. Sie können es also einfach im Kopierbefehl weglassen. Wenn Sie nur winzige Konfigurationsskripte erstellen möchten, können Sie kleinere EXE-Dateien erstellen.

Das kleinere SFX-Modul stellt keine Fragen. Es extrahiert die Dateien in einen temporären Ordner als das andere Modul und findet dann ausführbare Kandidaten. Entsprechend dem Quellcode (der auch auf der Downloadseite verfügbar ist) werden in C \ Util \ SfxSetup \ SfxSetup.c Dateien basierend auf ihrem Namen und ihrer Erweiterung unterschiedlich gewichtet, und anschließend wird die Datei mit der höchsten Punktzahl ausgewählt.

Beide SFX-Module werden automatisch als Administrator ausgeführt , zumindest in Windows 10, und dies kann nicht konfiguriert werden. Während dieses Verhalten für systemweite Setups wünschenswert sein kann, ist dies möglicherweise nicht immer der Fall. Außerdem basiert diese Entscheidung nur auf den Dateiversionsdaten, da kein Manifest enthalten ist, das Windows explizit mitteilt, was zu tun ist. Die Windows-Kompatibilität überprüft die Datei und findet Zeichenfolgen wie "Setup", die zur Eingabeaufforderung für die Erhöhung führen.

Wenn Sie ein SFX-Modul benötigen, für das keine Administratorrechte erforderlich sind, können Sie das SFX-Modul aus dem Quellcode neu erstellen oder seine Dateiversionsinformationen mit einem Ressourceneditor wie diesem bearbeiten . Entfernen Sie einfach das Wort "Setup" aus dem Feld "FileDescription", kompilieren Sie im Falle des erwähnten Resource Hacker die Datei und speichern Sie die EXE-Datei. Sie können diesen Schritt auch direkt für die Datei 7zS.sfx oder 7zS2.sfx ausführen und an einem beliebigen Ort aufbewahren, damit Sie damit SFX-Pakete mit nicht erhöhten Rechten erstellen können. Auf diese Weise können Sie die Dateiversionsinformationen vollständig anpassen, um Ihren Produktnamen oder irgendetwas darin abzulegen, das die Nutzlast beschreibt.

ygoe
quelle