Kann eine Datei nach dem Extrahieren aus einem 7-Zip-Archiv für selbstextrahierende Archive (SFX) ausgeführt werden?

71664
Mike G

Ich versuche, eine komprimierte bereitstellbare Anwendung zu erstellen.

Derzeit 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 die Installation per 7-Zip-Exe mit einem Klick ausführen können. Beim Erstellen des Archivs gibt es eine Parameterliste. Gibt es eine Möglichkeit, eine Art Kombination von Parametern festzulegen, um die extrahierte Installer-Programmdatei aufzurufen?

Leider scheint die 7-Zip-Dokumentation dieses Szenario nicht abzudecken. Ich habe mehrere bezahlte Anwendungen gesehen, die etwas ähnliches tun, aber ich versuche, das von mir geschriebene Tool von lizenziertem Code freizuhalten, damit wir es intern verwenden können.

35
Könnten Sie auf einige bezahlte hinweisen? abhishek77in vor 8 Jahren 0

4 Antworten auf die Frage

31
Matthew Lundberg

SFX-Module für Installateure

SFX-Module für Installer sind in einem externen Paket enthalten (7z_extra). Sie können diese Module unter www.7-zip.org herunterladen. Mit SFX-Modulen für Installationsprogramme (7zS.sfx und 7zSD.sfx) können Sie Ihr eigenes Installationsprogramm erstellen. Ein solches Modul extrahiert das Archiv in den temporären Ordner des Benutzers, führt ein bestimmtes Programm aus und entfernt die temporären Dateien, nachdem das Programm beendet wurde. Ein selbstextrahierendes Archiv für Installer muss erstellt werden, wenn 3 Dateien zusammengefügt werden: SFX_Module, Installer_Config, 7z_Archive. Außerdem ist die optionale Datei Installer_Config zulässig. Mit dem folgenden Befehl können Sie ein selbstentpackendes Installationsprogramm erstellen:

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

Eine möglichst kleine Größe des Installationspakets kann erreicht werden, wenn die Installationsdateien vor dem Einfügen in das 7z-Archiv dekomprimiert werden.

-y Der Schalter für das Installationsmodul gibt die Extraktion im stillen Modus an.

Quelle

Verwenden Sie das RunProgramAttribut, um ein Programm anzugeben, das nach dem Entpacken ausgeführt werden soll. Hier ist ein Beispiel, config.txtdas Install.cmdnach dem Auspacken ausgeführt wird. Das aktuelle Arbeitsverzeichnis wird die oberste Ebene des erweiterten archive.7zBaums sein. Dort Install.cmdsollte es sich also befinden.

;!@Install@!UTF-8! Title="Your Title" RunProgram="Install.cmd" ;!@InstallEnd@! 

An die ausführbare SFX-Datei übergebene Argumente werden an das Install.cmdSkript übergeben.

Ja. Ich habe es ausprobiert Etwas unkomfortabel, weil alles eine Kommandozeile ist, aber Sie werden eine gute Dokumentation dafür finden. Und ich bekomme die beste verfügbare Kompression kostenlos. Ganesh R. vor 14 Jahren 0
Nachdem ich diese Antwort gelesen hatte, fand ich Folgendes: http://www.msfn.org/board/lofiversion/index.php/t39048.html Es ist im Grunde die längere Version von dem, was hier veröffentlicht wird. Außerdem wird kurz erläutert, wie die config.txt erstellt wird. Mike G vor 14 Jahren 4
@MikeG - Dieser Link ist viel gründlicher. Es wurde erläutert, wie der Dekompressionsbereich vollständig transparent gemacht wird. Sehr schön danke! namuol vor 11 Jahren 0
Beachten Sie, dass die "SFX-Module in das LZMA SDK-Paket verschoben wurden" (verfügbar auf [7-zip.org] (http://www.7-zip.org/download.html)), ab Version 9.35 Beta. Lukas vor 8 Jahren 2
18
jcrawfor74

Die vereinbarte Lösung ist korrekt, aber sie hilft eigentlich nicht bei der Erklärung, was Sie wirklich tun müssen! Ich habe diese und viele andere Lösungen gelesen und konnte keine vollständigen und vollständigen Anweisungen finden.

Wenn Sie so verwirrt sind wie ich, lesen Sie bitte meinen Blogbeitrag, in dem Schritt für Schritt beschrieben wird, 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 tot werden können. Hier also 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 in den Ordner, in dem sich Ihre .msi und Ihre setup.exe befinden
  2. Wählen Sie sowohl die .msi als auch die setup.exe aus
  3. Klicken Sie mit der rechten Maustaste und wählen Sie 7Zip -> "Zum Archiv hinzufügen".
  4. Benennen 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 den 7z-Extra herunterladen.

  1. Folgen Sie diesem Link, um 7Zip herunterzuladen
  2. Sie müssen die Version 9.20 (als @ Mai-2015) herunterladen, da die Betaversion nicht die korrekten Dateien enthält.
  3. Ein direkter Download- Link.
  4. Extrahieren Sie die zusätzlichen 7-ZIP-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 kodieren müssen. Die folgenden Anweisungen verwenden Notepad ++.

  1. Gehen Sie mit dem Windows-Explorer zu c: \ Install
  2. Klicken Sie mit der rechten Maustaste, wählen Sie "Neue Textdatei" und nennen Sie es "config.txt"
  3. Klicken Sie mit der rechten Maustaste und wählen Sie "Mit NotePad ++ bearbeiten"
  4. Klicken Sie auf das "Encoding Menu" und wählen Sie "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 und ersetzen Sie [SOFTWARE v1.0.0.0] durch Ihren Produktnamen. 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 nirgendwo wurden die 4 oben genannten Schritte erläutert.

  1. Öffnen Sie ein Cmd-Fenster, Window + 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 und Sie werden jetzt sehen, dass Sie eine MyInstaller.exe haben

  4. Du bist fertig

Führen Sie das Installationsprogramm aus

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

PS Hinweis zur Automatisierung

Nachdem Sie dies in Ihrem c: \ Install-Verzeichnis ausgeführt 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 Install.bat einfach jedes Mal bearbeiten und ausführen, wenn Sie eine neue Version Ihres Implementierungspakets neu erstellen müssen.

Dies sollte die akzeptierte Antwort sein! noelicus vor 8 Jahren 2
Ist es möglich, ein Befehlszeilenargument an das `ExecuteParameters`-Element in` config.txt` zu übergeben? Beispiel: `C: \ Install \ MyInstaller.exe some_file.txt` führt` setup.exe some_file.txt` aus. dthor vor 7 Jahren 0
Ja, so ist es. Wie Matthew-Lundberg in [seiner Antwort] sagte (http://superuser.com/questions/42788/is-it-possible-to-execute-a-file-nach-extraktion-von-a-7-zip-self -extracting-a / 42792 # 42792), "An die ausführbare SFX-Datei übergebene Argumente werden an das Skript Install.cmd übergeben." dthor vor 7 Jahren 0
7
Matthew Talbert

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

1
ygoe

Aufbauend auf der Antwort von jcrawfor74 sind 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 vs. 140 kB), die config.txt-Datei wird jedoch nicht unterstützt. So können Sie es einfach im Kopierbefehl weglassen. Wenn Sie nur kleine 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 sucht dann nach ausführbaren Kandidaten. Gemäß dem Quellcode (ebenfalls auf der Downloadseite verfügbar) werden in C \ Util \ SfxSetup \ SfxSetup.c Dateien je nach Name und Erweiterung unterschiedlich gewogen und dann die Datei mit der höchsten Punktzahl ausgewählt.

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

Wenn Sie ein SFX-Modul benötigen, das nicht nach Administratorberechtigungen fragt, können Sie das SFX-Modul aus der Quelle neu erstellen oder die Dateiversionsinformationen mit einem Ressourcen-Editor wie diesem bearbeiten . Entfernen Sie einfach das Wort "Setup" aus dem Feld FileDescription, kompilieren Sie die Datei im Falle des genannten Resource Hacker und speichern Sie die EXE-Datei. Sie können diesen Schritt auch direkt in der Datei 7zS.sfx oder 7zS2.sfx ausführen und an einem beliebigen Ort aufbewahren, damit Sie nicht-erhöhte SFX-Pakete erstellen können. Sie können dies verwenden, um die Dateiversionsinformationen vollständig anzupassen, um Ihren Produktnamen oder alles, was die Nutzlast beschreibt, darin zu speichern.