Packager des paquets .msi évolués¶
Améliorer le paquet MSI¶
L’installation / la mise à jour du paquet TightVNC pris pour exemple précédemment nécessitera de le fermer le temps de la mise à jour.
Méthode manuelle : killalltasks¶
Une première méthode est de tuer tous les processus VNC avant de lancer l’installation du paquet tis-tightvnc.
# -*- coding: utf-8 -*-
from setuphelpers import *
uninstallkey = ["{8B9896FC-B4F2-44CD-8B6E-78A0B1851B59}"]
def install():
print('installing tis-tightvnc')
killalltasks("vncviewer.exe")
run(r'"tightvnc-2.8.5-gpl-setup-64bit.msi" /q /norestart')
Méthode élégante : install_msi_if_needed¶
# -*- coding: utf-8 -*-
from setuphelpers import *
uninstallkey = []
def install():
print('installing tis-tightvnc')
install_msi_if_needed('tightvnc-2.8.5-setup-64bit.msi')
la librairie de fonctions setuphelpers fournit la fonction install_msi_if_needed qui permet de gérer ce cas directement en une seule fonction ;
la fonction testera également si une version du logiciel est déjà installée sur la machine avec la clé de désinstallation ;
si présence il y a, l’installation sera enclenchée uniquement si la version actuellement installée est inférieure ;
après installation, la fonction testera finalement la présence de la clé de déinstallation et sa version pour vérifier que tout s’est bien passé ;
Paramètres |
Valeur par défaut |
Description |
---|---|---|
|
nom du fichier MSI à exécuter. |
|
|
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). |
|
{} |
propriétés supplémentaires à passer en argument au MSI pour l’installation. |
|
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 |
supprimme automatiquement une ancienne version d’un logiciel dont la uninstallkey est identique |
|
False |
force l’installation du logiciel même si une uninstall key avec une version identique est trouvée. |
Note
La fonction install_msi_if_needed récupère la clé de désinstallation depuis le MSI, il n’est pas nécessaire de l’écrire dans le fichier setup.py
.
En lançant le paquet, on observe ce qu’il se passe dans la console quand le logiciel est déjà installé.
wapt-get -ldebug install C:\waptdev\tis-tightvnc-wapt
Installing WAPT file C:\waptdev\tis-tightvnc-wapt
installing tis-tightvnc
installing x64 version
MSI tightvnc-2.8.5-gpl-setup-64bit.msi already installed. Skipping msiexec
Results:
=== install packages ===
C:\waptdev\tis-tightvnc-wapt | tis-tightvnc (2.8.5.0-1)
Gérer les plateformes x32/x64¶
Pour la gestion de l’architecture de processeur x32 / x64, on utilise la fonction iswin64().
# -*- coding: utf-8 -*-
from setuphelpers import *
uninstallkey = []
def install():
print(u'Installation en cours de TightVNC')
if iswin64():
print('installation version 64 bits')
install_msi_if_needed('tightvnc-2.8.5-setup-64bit.msi')
else:
print('installation version 32 bits')
install_msi_if_needed('tightvnc-2.8.5-setup-32bit.msi')
print(u'Installation terminée.')
Ajouter des propriétés supplémentaires en argument¶
Pour ajouter des propriétés supplémentaires on va les stocker dans un élément dict.
# -*- coding: utf-8 -*-
from setuphelpers import *
uninstallkey = []
properties = {
'SERVER_REGISTER_AS_SERVICE':0,
'SERVER_ADD_FIREWALL_EXCEPTION':0,
}
def install():
print(u'Installation en cours de TightVNC')
if iswin64():
print('installation version 64 bits')
install_msi_if_needed('tightvnc-2.8.5-setup-64bit.msi', properties =
properties)
else:
print('installation version 32 bits')
install_msi_if_needed('tightvnc-2.8.5-setup-32bit.msi', properties =
properties)
print(u'Installation terminée.')