49 votes

Est-il possible d'exécuter un fichier après l'extraction d'une archive auto-extractible (SFX) 7-Zip?

Je tente de créer une application compressée et déployable.

Actuellement, je prends un ensemble de fichiers que j'ai publiés depuis mon IDE (Visual Studio 2008 - WPF published application) et je les compresse dans une archive 7-Zip SFX.

Mes utilisateurs m'ont demandé s'ils peuvent installer en un seul clic à partir de l'exécutable 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 invoquer l'exécutable de l'installateur qui est extrait ?

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

41voto

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

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

Les modules SFX pour installateurs permettent de créer un programme d'installation. Ce module extrait l'archive dans un dossier temporaire, puis exécute le programme spécifié et supprime les fichiers temporaires après la fin de l'exécution du programme. L'archive auto-extractible pour les installateurs doit être créée en joignant 3 fichiers : Module_SFX, Configuration_Installateur, Archive_7z. La Configuration_Installateur est un fichier facultatif. Vous pouvez utiliser la commande suivante pour créer une archive auto-extractible d'installateur :

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 l'Installateur. Le fichier commence par la ligne ;!@Install@!UTF-8! et se termine par ;!@InstallEnd@!. Le fichier doit être écrit en encodage UTF-8. Le fichier contient des paires de chaînes :

ID_String="Valeur"

Titre Titre des messages

DebutMessage Message de début de la demande

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

ExecuterProgramme Commande 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

Répertoire Préfixe de répertoire pour "ExecuterProgramme". La valeur par défaut est ".\"

FichierExecuter Nom du fichier à exécuter

ParamètresExecuter Paramètres pour "FichierExecuter"

Par exemple :

 ;!@Install@!UTF-8!
 Titre="7-Zip 4.00"
 DebutMessage="Voulez-vous installer le 7-Zip 4.00 ?"
 ExecuterProgramme="setup.exe"
 ;!@InstallEnd@!

31voto

jcrawfor74 Points 3097

La solution convenue est correcte, mais en réalité, elle n'aide pas à expliquer ce que vous devez réellement faire !. J'ai lu ceci et de nombreuses autres solutions et je n'ai pas pu trouver des instructions simples, complètes et détaillées sur la manière de le faire.

Si vous êtes confus comme je l'étais, veuillez lire mon article de blog qui propose des instructions étape par étape sur la façon d'obtenir ce que Molly7244 a publié.

Comment créer une archive auto-extractible qui lance votre setup.exe avec l'interrupteur 7zip -sfx

On m'a fait remarquer que les liens peuvent devenir obsolètes, alors voici les étapes, extraites de mon blog

Étape 1 - Configuration de votre dossier d'installation

Pour faciliter les choses, créez un dossier c:\Install. C'est là que nous copierons tous les fichiers requis.

Étape 2 - Compressez vos installateurs avec 7Zip

  1. Allez dans le dossier contenant votre .msi et votre setup.exe
  2. Sélectionnez à la fois le .msi et le setup.exe
  3. Cliquez avec le bouton droit et choisissez 7Zip --> "Ajouter à l'archive"
  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 - Obtenez le module d'extension 7z-Extra sfx du SDK 7z

Vous devez télécharger le SDK 7z

  1. Suivez ce lien pour accéder au téléchargement de 7Zip
  2. Vous devez télécharger la version 19.00 (en date de décembre 2019) car la version bêta ne contient pas les bons fichiers.
  3. Un lien de téléchargement du SDK.
  4. Extrayez les fichiers du SDK 7zip.
  5. Copiez le fichier "7zSD.sfx" du répertoire bin du SDK dans c:\Install

Étape 4 - Configuration de votre fichier config.txt

Je recommanderais d'utiliser NotePad++ pour modifier ce fichier texte, car vous devrez encoder en UTF-8, les instructions suivantes utilisent notepad++.

  1. En utilisant l'explorateur de fichiers Windows, allez dans c:\Install
  2. Cliquez avec le bouton droit et choisissez "Nouveau fichier texte" et nommez-le config.txt
  3. Cliquez avec le bouton droit et choisissez "Modifier avec NotePad++
  4. Cliquez sur le "Menu d'encodage" et choisissez "Encoder en UTF-8"
  5. Saisissez quelque chose comme ceci :

    ;!@Install@!UTF-8!
    Title="SOFTWARE v1.0.0.0"
    BeginPrompt="Voulez-vous installer SOFTWARE v1.0.0.0?"
    RunProgram="setup.exe"
    ;!@InstallEnd@!

Modifiez ceci en remplaçant [SOFTWARE v1.0.0.0] par le nom de votre produit. Des notes sur les paramètres et les options pour le fichier de configuration sont disponibles ici

Vérification

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éez l'archive

Ces instructions que j'ai trouvées sur le web ne précisent nulle part les 4 étapes ci-dessus.

  1. Ouvrez une fenêtre cmd, Windows + R --> cmd --> appuyez sur entrée

  2. Dans la fenêtre de commande, saisissez ce qui suit

    cd \
    cd Install
    copy /b 7zSD.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é

Exécuter l'installateur

Double-cliquez sur MyInstaller.exe et il vous demandera votre message. Cliquez sur OK et 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 j'y mettrais le script de copie.

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

Maintenant, vous pouvez simplement modifier et exécuter Install.bat chaque fois que vous avez besoin de reconstruire une nouvelle version de votre package de déploiement.

8voto

Matthew Talbert Points 1169

Vous devriez également consulter NSIS. Avec cela, vous pouvez créer un programme d'installation compressé avec la même méthode que 7-Zip utilise (LZMA), donc il devrait être à peu près de la même taille, et vous avez un contrôle total sur le processus d'installation.

2voto

ygoe Points 1998

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. Il s'agit d'une version beaucoup plus petite (28 Ko contre 140 Ko) mais elle ne prend pas en charge le fichier config.txt. Vous pouvez donc simplement le laisser de côté dans la commande de copie. Si vous souhaitez uniquement créer de petits scripts de configuration, cela vous permet de construire des fichiers EXE plus petits.

Le module SFX plus petit ne pose aucune question. Il extrait les fichiers dans un dossier temporaire comme l'autre module, puis recherche les fichiers exécutables potentiels. Selon le code source (également disponible sur la page de téléchargement), dans C\Util\SfxSetup\SfxSetup.c, il pondère différemment les fichiers en fonction de leur nom et de leur extension, puis choisit le fichier avec le score le plus élevé.

Les deux modules SFX s'exécutent automatiquement en tant qu'administrateur, du moins dans Windows 10, et cela ne peut pas être configuré. Bien que ce comportement puisse être souhaitable pour les installations à l'échelle du système, ce n'est pas toujours le cas. De plus, cette décision est uniquement basée sur les données de la version du fichier car il n'y a pas de manifeste inclus qui indique explicitement à Windows quoi faire. La compatibilité avec Windows examine le fichier et trouve des chaînes comme "Setup" qui conduisent à la demande d'élévation.

Si vous avez besoin d'un module SFX qui ne demande pas d'autorisations d'administrateur, vous pouvez reconstruire le module SFX à partir de la source, ou plus simplement, modifier les informations de version du fichier avec 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 pour l'utiliser afin de créer des packages SFX non élevés. Et vous pouvez utiliser ceci pour personnaliser entièrement les informations de version du fichier afin d'y mettre votre nom de produit ou toute autre information qui décrit la charge utile.

0voto

Lawrence Points 1

Est-ce que cela prend en charge ce concept de copie et de remplacement de fichiers (fond d'écran Windows) et de copie de logos à un emplacement spécifique sur une unité?

Exemple: akeown /f c:\windows\WEB\wallpaper\Windows\img0.jpg takeown /f C:\Windows\Web\4K\Wallpaper\Windows*.* icacls c:\windows\WEB\wallpaper\Windows\img0.jpg /Grant Administrateurs:(F) icacls C:\Windows\Web\4K\Wallpaper\Windows*.* /Grant Administrateurs:(F) del c:\windows\WEB\wallpaper\Windows\img0.jpg del /q C:\Windows\Web\4K\Wallpaper\Windows*.* copy "%~dp0img0.jpg" c:\windows\WEB\wallpaper\Windows\img0.jpg copy "%~dp04k*.*" C:\Windows\Web\4K\Wallpaper\Windows

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X