Créer un paquet .exe evolué¶
Améliorer l’installation¶
Notre paquet Mozilla Firefox ESR est fonctionnel mais il n’est pas encore optimal.
le paquet exécute l’installation du logiciel même si le logiciel est déjà installé, il l’écrase dans tous les cas ;
le paquet ne vérifie pas la version du logiciel s’il est déjà installé ;
le paquet ne vérifie pas la version du logiciel s’il est déjà installé ;
Comme avec les MSI, nous résolvons ces problèmes en utilisant la fonction install_exe_if_needed
.
Utiliser install_exe_if_needed¶
La fonction est sensiblement la même que celle utilisée pour les installeurs MSI, avec quelques différences :
la fonction nécessite l’ajout des flags silencieux en paramètre ;
la fonction nécessite l’ajout de la clé de désinstallation en paramètre ;
On modifie notre exemple Mozilla Firefox ESR en conséquence :
# -*- coding: utf-8 -*-
from setuphelpers import *
uninstallkey = []
def install():
print('installing tis-firefox-esr')
install_exe_if_needed("Firefox Setup 45.5.0esr.exe",
silentflags="-ms",
key='Mozilla Firefox 45.4.0 ESR (x64 fr)'
min_version="45.5.0"
killbefore="firefox.exe")
Paramètres |
Valeur par défaut |
Description |
---|---|---|
|
nom du fichier .exe à exécuter. |
|
|
paramètres silencieux à passer en argument à l’installeur. |
|
|
None |
clé de désinstallation du programme. |
|
None |
version minimale au dessus de laquelle il mettra à jour. |
|
[ ] |
liste des programmes à tuer avant de lancer l’installation. |
|
[0,3010] |
codes de retour autres que 0 ou 3010 acceptés en retour par la fonction. |
|
300 |
durée d’attente maximale d’installation (en secondes). |
|
None |
valeur passée en paramètre pour le contrôle de version au lieu de celle retournée par la fonction installed_softwares. |
|
False |
Permet d’enclencher automatiquement la suppression d’une uninstallkey identique avec une version précédente à celle mentionnée |
|
False |
Permet de forcer l’installation même si une uninstallkey avec une version identique est trouvée. |
En conséquence, le paquet aura un comportement différent :
le logiciel Firefox s’installera uniquement si le logiciel n’est pas installé et si la version est strictement inférieure à 45.5.0, sauf si l’option
--force
est indiquée lors de l’installation du paquet ;à l’installation, les processus firefox.exe en cours d’exécution seront terminés ;
la fonction ajoutera elle-même la clé de désinstallation, donc laisser uninstallkey vide ;
à la fin de l’installation, la fonction ira vérifier si l”uninstallkey est bien présente sur le poste et si la version est bien égale ou supérieure à 45.5.0, si ce n’est pas le cas, elle basculera le paquet en ERROR ;
Gérer la désinstallation¶
Cas particulier d’un dé-installeur non-silencieux¶
Dans ce cas particulier, un paquet utilisant install_exe_if_needed renseigne la clé de désinstallation, mais cette clé de désinstallation pointe vers un dé-installeur non-silencieux.
Il nous faut contourner le problème en utilisant une fonction qui va supprimer la clé de désinstallation à la fin de l’installation.
:emphasize-lines: 13
# -*- coding: utf-8 -*-
from setuphelpers import *
uninstallkey = []
def install():
print('installing tis-firefox-esr')
install_exe_if_needed("Firefox Setup 45.5.0esr.exe",
silentflags="-ms",
key='Mozilla Firefox 45.4.0 ESR (x64 fr)',
min_version="45.5.0",
killbefore="firefox.exe")
uninstallkey.remove('Mozilla Firefox 45.4.0 ESR (x64 fr)')
def uninstall():
print('uninstalling tis-firefox-esr')
run(r'"C:\Program Files\Mozilla Firefox\uninstall\helper.exe" -ms')