Packager des paquets *.exe simples

Note

Variation par rapport aux MSI

WAPT préfère les MSI car les installeurs *.exe ne sont pas standardisés et leurs arguments silencieux peuvent être différents d’un logiciel à un autre.

Indication

Depuis la version 1.3.12 de WAPT, une nouvelle méthode de création rapide de paquets depuis la console WAPT est devenue disponible.

Cette documentation est toujours d’actualité, nous vous conseillons cependant d’utiliser l’interface graphique pour instancier vos modèles de paquets. voir : Créer un paquet WAPT depuis la console.

  • obtenir l’installeur exe depuis une source sûre ;

    Télécharger l’installeur au format *.exe (par exemple Firefox ESR x64) :

  • rechercher la documentation associée pour les flags silencieux ;

Créer un template de base de paquet à partir de l’EXE

Launching the Windows Command Line utility as Local Administrator

Lancement de l’invite de commande Windows en tant qu’Administrateur Local

  • créer un projet de paquet logiciel ;

    wapt-get make-template <chemin_exe> <nom_du_paquet>
    

    Exemple avec Mozilla Firefox ESR :

    wapt-get make-template "Firefox Setup 52.6.0esr.exe" "tis-firefox-esr"
    
    Template created. You can build the WAPT package by launching
      C:\Program Files (x86)\wapt\wapt-get.exe build-package C:\waptdev\tis-firefox-esr-wapt
    You can build and upload the WAPT package by launching
      C:\Program Files (x86)\wapt\wapt-get.exe build-upload C:\waptdev\tis-firefox-esr-wapt
    

    PyScripter s’ouvre ensuite avec le projet du paquet *.exe.

    PyScripter opening with focus on the *control* file

    PyScripter affichant le fichier control

  • Vérifier le fichier control

    Mozilla Firefox-ESR ne répond pas aux standards et retourne un numéro de version erroné (il s’agit du numéro de version du logiciel qui créé l’installeur).

    Fichier control d’origine

    package           : tis-firefox-esr
    version           : 4.42.0.0-0
    architecture      : all
    section           : base
    priority          : optional
    maintainer        : user
    description       : automatic package for firefox setup 52.6.0esr
    

    Fichier control modifié

    package           : tis-firefox-esr
    version           : 52.6.0-1
    architecture      : all
    section           : base
    priority          : optional
    maintainer        : Tranquil-IT Systems
    description       : Mozilla Firefox 52.6.0 ESR
    

    Note

    Une sous-version -1 a été ajoutée. C’est la version de packaging du paquet WAPT.

    Cela permet de ne pas modifier la version réelle du logiciel quand on pousse par exemple une nouvelle configuration du même logiciel sur le parc.

  • vérifier le fichier setup.py

    WAPT a mis un flag silencieux générique /VERYSILENT qui ne fonctionne peut-être pas avec Mozilla Firefox ESR.

    Dans ce cas il convient d’indiquer le bon flag silencieux que nous avons recherché précédemment :

  • changer le code du fichier setup.py en conséquence ;

    :emphasize-lines: 8
    # -*- coding: utf-8 -*-
    from setuphelpers import *
    
    uninstallkey = []
    
    def install():
        print('installing tis-firefox-esr')
        run(r'"Firefox Setup 52.6.0esr.exe" -ms')
    
  • enregistrer le paquet ;

Gérer la désinstallation

Avec un exe, la clé de désinstallation n’est pas disponible sans avoir installé le logiciel une première fois.

Cette clé est disponible dans la base de registre :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • ouvrir une invite de commande Windows ;
  • récupérer la clé de désinstallation avec wapt-get list-registry firefox
UninstallKey                          Software                               Version            Uninstallstring
------------------------------------- -------------------------------------- ------------------ ------------------------------------------------------
Mozilla Firefox 52.6.0 ESR (x64 fr)   Mozilla Firefox 52.6.0 ESR (x64 fr)    52.6.0             "C:\Program Files\Mozilla Firefox\uninstall\helper.exe"
  • copier la clé de désinstallation UninstallKey : Mozilla Firefox 52.6.0 ESR (x64 fr) ;
  • modifier en conséquence le script setup.py avec la clé de désintallation correcte ;
:emphasize-lines: 4

# -*- coding: utf-8 -*-
from setuphelpers import *

uninstallkey = ['Mozilla Firefox 52.6.0 ESR (x64 fr)']

def install():
    print('installing tis-firefox-esr')
    run(r'"Firefox Setup 52.6.0esr.exe" -ms')

Note

La clé de désinstallation doit être exactement la même que celle listée avec la commande list-registry. La clé de désinstallation peut être un GUID tel que 9516000000-0052-040C-0000-0000000FF1CE, un GUID avec des caractères entre crochets, {95160000-0052-040C-0000-0000000FF1CE}, ou simplement une chaîne de caractères comme Git_is1 ou Mozilla Firefox 52.6.0 ESR (x64fr).

  • relancer l’installation du paquet afin que la clé de désinstallation soit prise en compte dans la base de données locale WAPT ;

  • tester la désinstallation du paquet ;

  • lancer un remove du paquet depuis le panneau Run Configurations de PyScripter ;

    After uninstallation, the software is correctly removed

    À l’issue de la désinstallation, le programme est désinstallé.

    On pourra vérifier l’absence de clé de registre de désinstallation en relançant la commande wapt-get list-registry.

    UninstallKey          Software          Version            Uninstallstring
    --------------------- ----------------- ------------------ ---------------
    --------------------- ----------------- ------------------ ---------------
    

Cas particulier d’un désinstalleur non-silencieux

Il arrive dans certains cas que le programme s’installe silencieusement mais que le désinstalleur ne s’exécute pas silencieusement.

Dans ce cas précis on va surcharger la fonction uninstall().

Exemple avec Mozilla Firefox si cela était nécessaire :

# -*- coding: utf-8 -*-
from setuphelpers import *

uninstallkey = ['Mozilla Firefox 52.6.0 ESR (x64 fr)']

def install():
    print('installing tis-firefox-esr')
    run(r'"Firefox Setup 52.6.0esr.exe" -ms')

def uninstall():
    print('uninstalling tis-firefox-esr')
    run(r'"C:\Program Files\Mozilla Firefox\uninstall\helper.exe" -ms')

Indication

Dans la fonction uninstall(), on ne peut pas appeler des fichiers contenus dans le paquet WAPT. Pour les appeler, il faudra avoir copié les fichiers dans un répertoire local de la machine lors de l’installation du paquet.

Construire et charger le paquet WAPT

Une fois l’installation et la désinstallation configurées et testées vous pouvez effectuer un build-upload pour charger votre nouveau paquet WAPT sur votre dépôt.