Est-il possible d'exécuter un fichier après extraction à partir d'une archive à extraction automatique (ZX) 7-Zip?

40

J'essaie de faire une application déployable compressée.

Actuellement, je récupère un ensemble de fichiers que j'ai publiés à partir de mon IDE (application publiée Visual Studio 2008 - WPF) et les compresse dans une archive 7-Zip SFX.

Mes utilisateurs ont demandé s'ils pouvaient "installer en un clic" à partir du fichier exe 7-Zip. Il y a une liste de paramètres lorsque je crée l'archive. Est-il possible de définir une sorte de combinaison de paramètres pour appeler le fichier exécutable du programme d'installation extrait?

Malheureusement, la documentation 7-Zip ne semble pas couvrir ce scénario. J'ai vu plusieurs applications payantes qui font quelque chose de similaire, mais j'essaie de garder l'outil que je suis en train d'écrire sans code sous licence afin que nous puissions l'utiliser en interne.

Mike G
la source
Pourriez-vous en indiquer un payé?
Abhishek77in

Réponses:

35

Vous devrez télécharger le SDK LMZA à partir de 7-Zip . Le fichier "installer.txt" contient la documentation:

7zSD.sfx est un module SFX pour les installateurs. 7zSD.sfx utilise msvcrt.dll.

Les modules SFX pour les installateurs permettent de créer un programme d'installation. Ce module extrait l’archive dans le dossier temporaire, puis exécute le programme spécifié et supprime les fichiers temporaires une fois le programme terminé. Une archive auto-extractible pour les installateurs doit être créée en joignant 3 fichiers: SFX_Module, Installer_Config, 7z_Archive. Installer_Config est un fichier facultatif. Vous pouvez utiliser la commande suivante pour créer une archive à extraction automatique du programme d'installation:

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

Vous devez créer un fichier config.txt.

Le fichier de configuration contient des commandes pour le programme d'installation. Le fichier commence à partir de la chaîne ;!@Install@!UTF-8!et se termine par ;!@InstallEnd@!. Le fichier doit être écrit en codage UTF-8. Le fichier contient des paires de chaînes:

ID_String = "Valeur"

Title Titre des messages

BeginPrompt Commencer le message d'invite

ProgressLa valeur peut être "oui" ou "non". La valeur par défaut est "oui".

RunProgramCommande pour l'exécution. La valeur par défaut est "setup.exe". La sous-chaîne %% T sera remplacée par le chemin du dossier temporaire, où les fichiers ont été extraits

DirectoryPréfixe de répertoire pour "RunProgram". La valeur par défaut est ". \"

ExecuteFile Nom du fichier à exécuter

ExecuteParameters Paramètres pour "ExecuteFile"

Par exemple:

 ;!@Install@!UTF-8!
 Title="7-Zip 4.00"
 BeginPrompt="Do you want to install the 7-Zip 4.00?"
 RunProgram="setup.exe"
 ;!@InstallEnd@!
Jason
la source
1
Oui. J'ai essayé Un peu inconfortable car tout est en ligne de commande, mais vous trouverez une bonne documentation à ce sujet. Et je reçois la meilleure compression disponible gratuitement.
Ganesh R.
@MikeG - Ce lien est beaucoup plus complet. Il expliquait comment rendre la partie de décompression complètement transparente. Très gentil merci!
Namuol
5
Notez que les "modules SFX ont été déplacés vers le package LZMA SDK" (disponible sur 7-zip.org ) à partir de la version 9.35 bêta.
Lukas
21

La solution convenue est correcte, mais elle n’aide en fait pas à expliquer ce que vous devez réellement faire!. J'ai lu ceci ainsi que de nombreuses autres solutions et je ne trouvais pas d'instructions complètes complètes et simples sur la façon de procéder.

Si vous êtes confus comme avant, lisez mon billet de blog qui fournit des instructions étape par étape sur la réalisation de ce que Molly7244 a publié.

Comment créer une archive auto-extractible qui exécute votre setup.exe avec le commutateur 7zip -sfx

Il a été porté à mon attention que des liens peuvent devenir morts alors voici les étapes de mon blog

Étape 1 - Configurez votre dossier d'installation

Pour rendre cela facile, créez un dossier c: \ Install. C'est ici que nous allons copier tous les fichiers requis.

Étape 2 - 7Zip vos installateurs

  1. Allez dans le dossier qui a votre .msi et votre setup.exe
  2. Sélectionnez les fichiers .msi et setup.exe
  3. Faites un clic droit et choisissez 7Zip -> "Ajouter aux archives"
  4. Nommez votre archive "Installer.7z" (ou un nom de votre choix)
  5. Cliquez sur OK
  6. Vous devriez maintenant avoir "Installer.7z".
  7. Copiez ce fichier .7z dans votre répertoire c: \ Install

Étape 3 - Obtenir le module d’extension 7z-Extra sfx

Vous devez télécharger le 7z-Extra.

  1. Suivez ce lien pour télécharger 7Zip
  2. Vous devez télécharger la version 9.20 (en tant que @ May-2015) car la version bêta ne contient pas les fichiers corrects.
  3. Un lien de téléchargement direct.
  4. Extraire les fichiers supplémentaires 7zip
  5. Copiez le fichier "7zS.sfx" dans c: \ Install

Étape 4 - Configurez votre fichier config.txt

Je vous recommande d'utiliser NotePad ++ pour éditer ce fichier texte car vous devrez encoder en UTF-8. Les instructions suivantes utilisent notepad ++.

  1. À l'aide de l'explorateur Windows, allez à c: \ Install
  2. faites un clic droit et choisissez "Nouveau fichier texte" et nommez-le config.txt
  3. faites un clic droit et choisissez "Modifier avec le Bloc-notes ++
  4. Cliquez sur le "Menu Encodage" et choisissez "Encoder en UTF-8".
  5. Entrez quelque chose comme ceci:

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

Modifiez cette version en remplaçant [SOFTWARE v1.0.0.0] par votre nom de produit. Les notes sur les paramètres et les options du fichier d’installation sont ici

Point de contrôle

Vous devriez maintenant avoir un dossier "c: \ Install" avec les 3 fichiers suivants:

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

Étape 5 - Créer l'archive

Ces instructions que j’ai trouvées sur le Web mais n’ont explicité nulle part les 4 étapes ci-dessus.

  1. Ouvrez une fenêtre de commande, Fenêtre + R -> cmd -> appuyez sur Entrée.
  2. Dans la fenêtre de commande, tapez ce qui suit

    cd \
    cd Install
    copy /b 7zS.sfx + config.txt + Installer.7z MyInstaller.exe
    
  3. Regardez dans c: \ Install et vous verrez maintenant que vous avez un MyInstaller.exe

  4. Vous avez fini

Lancer l'installateur

Double-cliquez sur MyInstaller.exe et votre message s'affichera. Cliquez sur OK et le fichier setup.exe s'exécutera.

Note PS sur l'automatisation

Maintenant que cela fonctionne dans votre répertoire c: \ Install, je créerais un fichier "Install.bat" et y placerais le script de copie.

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

Vous pouvez maintenant éditer et exécuter le fichier Install.bat chaque fois que vous avez besoin de reconstruire une nouvelle version de votre package de déploiement.

jcrawfor74
la source
2
Cela devrait être la réponse acceptée!
Noelicus
Est-il possible de passer un argument en ligne de commande à l' ExecuteParametersélément dans config.txt? Par exemple: C:\Install\MyInstaller.exe some_file.txt exécuterait setup.exe some_file.txt.
dthor
Oui, ça l'est. Comme le disait Matthew Lundberg dans sa réponse , "les arguments transmis à l'exécutable SFX sont transmis au script Install.cmd"
mardi
8

Vous devriez également regarder NSIS . Avec lui, vous pouvez créer un programme d'installation qui est compressé avec la même méthode que celle utilisée par 7-Zip ( LZMA ). Il doit donc avoir à peu près la même taille et vous avez le plein contrôle du processus d'installation.

Matthew Talbert
la source
2

En s'appuyant sur la réponse de jcrawfor74, voici quelques informations supplémentaires:

Au lieu de 7zS.sfx , vous pouvez également utiliser le fichier 7zS2.sfx . C'est une version beaucoup plus petite (28 Ko contre 140 Ko) mais elle ne supporte pas le fichier config.txt. Donc, vous pouvez simplement le laisser dans la commande de copie. Si vous voulez juste créer de petits scripts de configuration, cela vous permet de construire des fichiers EXE plus petits.

Le plus petit module SFX ne pose aucune question. Il extrait les fichiers dans un dossier temporaire en tant qu'autre module, puis recherche les candidats exécutables. Selon le code source (également disponible sur la page de téléchargement), dans C \ Util \ SfxSetup \ SfxSetup.c, il pèse les fichiers différemment en fonction de leur nom et de leur extension, puis sélectionne le fichier dont le score est le plus élevé.

Les deux modules SFX s'exécutent automatiquement en tant qu'administrateur , du moins sous Windows 10, et cela ne peut pas être configuré. Bien que ce comportement puisse être souhaitable pour les configurations à l’échelle du système, il peut ne pas en être toujours ainsi. En outre, cette décision est uniquement basée sur les données de version de fichier car il n'y a pas de manifeste inclus explicitement ce que Windows doit faire. La compatibilité Windows examine le fichier et trouve des chaînes telles que "Configuration" qui mènent à l'invite d'élévation.

Si vous avez besoin d’un module SFX qui ne demande pas d’autorisations d’administrateur, vous pouvez le reconstruire à partir du code source ou, plus simplement, éditer ses informations de version de fichier à l’aide d’un éditeur de ressources comme celui-ci . Supprimez simplement le mot "Setup" du champ FileDescription, dans le cas du Resource Hacker mentionné, compilez le fichier et enregistrez le fichier EXE. Vous pouvez également effectuer cette étape directement sur le fichier 7zS.sfx ou 7zS2.sfx et le conserver quelque part afin de pouvoir l'utiliser pour créer des packages SFX non élevés. Et vous pouvez l'utiliser pour personnaliser entièrement les informations de version de fichier afin d'y placer le nom de votre produit ou tout élément décrivant la charge utile.

ygoe
la source