È possibile eseguire un file dopo l'estrazione da un archivio SFX (self-extracting archive) 7-Zip?


40

Sto provando a fare un'applicazione distribuibile comprimibile.

Attualmente sto prendendo una serie di file che ho pubblicato dal mio IDE (Visual Studio 2008 - applicazione pubblicata WPF) e li comprimo in un archivio SFX a 7 zip.

I miei utenti hanno chiesto se possono "installare un clic" dall'exe 7-Zip. C'è un elenco di parametri quando sto creando l'archivio. C'è un modo per impostare una sorta di combinazione di parametri per invocare l'eseguibile del programma di installazione che viene estratto?

Purtroppo la documentazione di 7-Zip non sembra coprire questo scenario. Ho visto diverse applicazioni a pagamento che fanno qualcosa di simile a questo, ma sto cercando di mantenere lo strumento che sto scrivendo privo di codice concesso in licenza in modo da poterlo utilizzare internamente.


Potresti indicare qualcuno pagato?
abhishek77in

Risposte:


35

Dovrai scaricare l' SDK LMZA da 7-Zip . Il file "installer.txt" contiene documentazione:

7zSD.sfx è il modulo SFX per gli installatori. 7zSD.sfx utilizza msvcrt.dll.

I moduli SFX per gli installatori consentono di creare un programma di installazione. Tale modulo estrae l'archivio nella cartella temporanea, quindi esegue il programma specificato e rimuove i file temporanei al termine del programma. L'archivio autoestraente per i programmi di installazione deve essere creato come unione di 3 file: SFX_Module, Installer_Config, 7z_Archive. Installer_Config è un file opzionale. È possibile utilizzare il comando seguente per creare un archivio autoestraente dell'installer:

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

Devi creare un file config.txt.

Il file di configurazione contiene comandi per il programma di installazione. Il file inizia dalla stringa ;!@Install@!UTF-8!e termina con ;!@InstallEnd@!. Il file deve essere scritto con la codifica UTF-8. Il file contiene coppie di stringhe:

ID_String = "Valore"

Title Titolo per i messaggi

BeginPrompt Inizia messaggio di richiesta

ProgressIl valore può essere "sì" o "no". Il valore predefinito è "sì".

RunProgramComando per l'esecuzione. Il valore predefinito è "setup.exe". Il sottostring %% T verrà sostituito con il percorso della cartella temporanea, in cui sono stati estratti i file

DirectoryPrefisso directory per "RunProgram". Il valore predefinito è ". \"

ExecuteFile Nome del file per l'esecuzione

ExecuteParameters Parametri per "ExecuteFile"

Per esempio:

 ;!@Install@!UTF-8!
 Title="7-Zip 4.00"
 BeginPrompt="Do you want to install the 7-Zip 4.00?"
 RunProgram="setup.exe"
 ;!@InstallEnd@!

1
sì. L'ho provato Un po 'a disagio perché tutto è a riga di comando, ma troverai una buona documentazione per questo. E ottengo la migliore compressione disponibile gratuitamente.
Ganesh R.,

@MikeG - Questo link è molto più completo. Ha spiegato come rendere la parte di decompressione completamente trasparente. Molto bello - Grazie!
namuol,

5
Si noti che i "moduli SFX sono stati spostati nel pacchetto SDK LZMA" (disponibile su 7-zip.org ) dalla versione 9.35 beta.
Lukas,

21

La soluzione concordata è corretta, ma in realtà non aiuta a spiegare cosa devi effettivamente fare !. Ho letto questa e molte altre soluzioni e non sono riuscito a trovare semplici e complete semplici istruzioni su come farlo.

Se sei confuso come me, leggi il mio post sul blog che fornisce istruzioni dettagliate su come ottenere ciò che Molly7244 ha pubblicato.

Come creare un archivio autoestraente che esegue setup.exe con l'opzione 7zip -sfx

È stato portato alla mia attenzione che i link possono diventare morti, quindi, ecco i passaggi, dal mio blog

Passaggio 1: imposta la cartella di installazione

Per semplificare la creazione di una cartella c: \ Installa. Qui è dove copieremo tutti i file richiesti.

Passaggio 2: 7 Comprimi i file di installazione

  1. Vai alla cartella che ha il tuo .msi e il tuo setup.exe
  2. Seleziona sia .msi che setup.exe
  3. Fare clic con il tasto destro e selezionare 7Zip -> "Aggiungi all'archivio"
  4. Dai un nome al tuo archivio "Installer.7z" (o un nome a tua scelta)
  5. Fai clic su OK
  6. Ora dovresti avere "Installer.7z".
  7. Copia questo file .7z nella directory c: \ Install

Passaggio 3: scarica il modulo di estensione sfx 7z-Extra

Devi scaricare il 7z-Extra.

  1. Segui questo link per andare a scaricare 7Zip
  2. Devi scaricare la versione 9.20 (come @ maggio-2015) poiché la beta non contiene i file corretti.
  3. Un link per il download diretto .
  4. Estrai i file extra di 7zip
  5. Copia il file "7zS.sfx" in c: \ Install

Passaggio 4: imposta config.txt

Vorrei raccomandare l'uso di NotePad ++ per modificare questo file di testo in quanto sarà necessario codificare in UTF-8, le seguenti istruzioni utilizzano Notepad ++.

  1. Utilizzando Windows Explorer vai su c: \ Installa
  2. tasto destro del mouse e selezionare "Nuovo file di testo" e denominarlo config.txt
  3. tasto destro del mouse e scegliere "Modifica con NotePad ++
  4. Fai clic sul "Menu codifica" e scegli "Codifica in UTF-8"
  5. Inserisci qualcosa del genere:

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

Modifica questo sostituendo [SOFTWARE v1.0.0.0] con il nome del tuo prodotto. Le note sui parametri e le opzioni per il file di installazione sono qui

CheckPoint

Ora dovresti avere una cartella "c: \ Install" con i seguenti 3 file:

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

Passaggio 5: creare l'archivio

Queste istruzioni che ho trovato sul web ma da nessuna parte hanno spiegato uno dei 4 passaggi sopra.

  1. Apri una finestra cmd, Window + R -> cmd -> premi invio
  2. Nella finestra di comando digitare quanto segue

    cd \
    cd Install
    copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe
    
  3. Cerca in c: \ Install e ora vedrai che hai un MyInstaller.exe

  4. Sei finito

Esegui il programma di installazione

Fare doppio clic su MyInstaller.exe e verrà visualizzato il messaggio. Fare clic su OK e verrà eseguito setup.exe.

Nota PS sull'automazione

Ora che hai funzionato nella tua directory c: \ Install, creerei un file "Install.bat" e inserirò lo script di copia.

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

Ora puoi semplicemente modificare ed eseguire Install.bat ogni volta che devi ricostruire una nuova versione del tuo pacchetto di distribuzione.


2
Questa dovrebbe essere la risposta accettata!
Noelicus,

È possibile passare una riga di comando arg ExecuteParametersall'elemento in config.txt? Ad esempio: C:\Install\MyInstaller.exe some_file.txt verrebbe eseguito setup.exe some_file.txt.
dthor,

Sì. Come ha detto matthew-lundberg nella sua risposta , "Gli argomenti passati all'eseguibile SFX vengono passati allo script Install.cmd"
dthor,

8

Dovresti anche dare un'occhiata a NSIS . Con esso, puoi creare un programma di installazione compresso con lo stesso metodo utilizzato da 7-Zip ( LZMA ), quindi dovrebbe avere all'incirca le stesse dimensioni e avere il pieno controllo del processo di installazione.


2

Sulla base della risposta di jcrawfor74, ecco alcune informazioni aggiuntive:

Invece di 7zS.sfx , puoi anche usare il file 7zS2.sfx . Questa è una versione molto più piccola (28 kB contro 140 kB) ma non supporta il file config.txt. Quindi puoi semplicemente lasciarlo fuori nel comando copia. Se vuoi solo creare piccoli script di configurazione, questo ti consente di creare file EXE più piccoli.

Il modulo SFX più piccolo non pone domande. Estrae i file in una cartella temporanea come l'altro modulo e quindi trova i candidati eseguibili. Secondo il codice sorgente (disponibile anche nella pagina dei download), in C \ Util \ SfxSetup \ SfxSetup.c, pesa i file in modo diverso in base al loro nome ed estensione e quindi seleziona il file con il punteggio più alto.

Entrambi i moduli SFX vengono eseguiti automaticamente come amministratore , almeno in Windows 10, e questo non può essere configurato. Mentre questo comportamento potrebbe essere desiderabile per le configurazioni a livello di sistema, questo potrebbe non essere sempre il caso. Inoltre, questa decisione si basa solo sui dati della versione del file perché non è incluso alcun manifest che indichi esplicitamente a Windows cosa fare. La compatibilità di Windows esamina il file e trova stringhe come "Setup" che portano al prompt di elevazione.

Se è necessario un modulo SFX che non richiede le autorizzazioni di amministratore, è possibile ricostruire il modulo SFX dall'origine o, più semplice, modificare le informazioni sulla versione del file con un editor di risorse come questo . Basta rimuovere la parola "Setup" dal campo FileDescription, nel caso del menzionato Resource Hacker compilare il file e salvare il file EXE. Puoi anche eseguire questo passaggio sul file 7zS.sfx o 7zS2.sfx direttamente e tenerlo da qualche parte in modo da poterlo utilizzare per creare pacchetti SFX non elevati. E puoi usarlo per personalizzare completamente le informazioni sulla versione del file per inserire il nome del tuo prodotto o qualsiasi cosa in esso che descriva il payload.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.