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.')