web-dev-qa-db-fra.com

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

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 je 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 pour que nous puissions l'utiliser en interne.

37
Mike G

Modules SFX pour les installateurs

Les modules SFX pour les installateurs sont inclus dans un package externe (7z_extra). Vous pouvez télécharger ces modules sur www.7-Zip.org. Les modules SFX pour les installateurs (7zS.sfx et 7zSD.sfx) vous permettent de créer votre propre programme d'installation. Un tel module extrait l'archive dans le dossier temporaire de l'utilisateur, exécute un 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. De plus, un fichier facultatif, Installer_Config, est autorisé. Vous pouvez utiliser la commande suivante pour créer une archive à extraction automatique du programme d'installation:

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

Une taille de package d'installation optimale peut être atteinte si les fichiers d'installation sont décompressés avant de les inclure dans l'archive 7z.

Le commutateur -y pour le module d'installation spécifie l'extraction en mode silencieux.

Source

Pour spécifier un programme à exécuter après la décompression, utilisez l'attribut RunProgram. Par exemple, voici un exemple config.txt qui exécute Install.cmd après la décompression. Le répertoire de travail actuel sera le niveau supérieur de l'arborescence archive.7z développée, donc c'est là que Install.cmd doit résider.

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

Les arguments transmis à l'exécutable SFX sont transmis au script Install.cmd.

33
Molly7244

La solution convenue est correcte, mais elle n’aide en fait pas à expliquer ce que vous devez réellement faire!. J'ai lu ceci et beaucoup d'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 détaillées 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 aller à 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 Windows Explorer, 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. 7zSfx
  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

    Vous avez terminé

Lancer l'installateur

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

P.S. Note 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.

20
jcrawfor74

Vous devriez également regarder NSIS . Avec celui-ci, 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 ). même taille et vous avez le plein contrôle du processus d’installation.

7
Matthew Talbert

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 avec un éditeur de ressources tel que 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.

1
ygoe