Hide navigation sidebar
Hide table of contents sidebar
Skip to content
Quickstart Official documentation Setuphelpers Changelog FAQ
Back to top
View this page
Toggle table of contents sidebar

# 5. FAQ - Paquets

## 5.1. Comment désinstaller un logiciel qui n’a pas été installé via WAPT

Une fois WAPT déployé, vous souhaiterez peut-être désinstaller les anciens logiciels déjà installés sur vos terminaux. WAPT vous permet d’automatiser la désinstallation de logiciels sur plusieurs machines sans avoir à intervenir manuellement sur chaque appareil.

Pour ce faire, il suffit de créer un package WAPT personnalisé contenant du code Python.

Avertissement

Cette méthode fonctionne seulement pour des logiciels installé sur la partie système de la machine.

Procédure

1. Identifiez le logiciel que vous souhaitez désinstaller.

2. Installez le logiciel cible sur une machine de test afin de vérifier le bon fonctionnement du package.

3. Ouvrez la console WAPT.

4. Aller à :

> Dépôt privé > Créer un modèle de paquet à partir d’un fichier de configuration > Modèle de paquet > Paquet vide

5. Copiez le code suivant dans le paquet.

Note

Si vous le souhaitez, vous pouvez mettre en commentaire la section commençant par :

    ``if Version(to_uninstall["version"]) < Version(control.get_software_version()):``

si vous souhaitez désinstaller toutes les versions du logiciel, quel que soit leur numéro de version.

6. Personnalisez le code en remplaçant le nom du logiciel par celui de l’application que vous souhaitez désinstaller.

7. Vous pouvez également ajouter le nom du processus logiciel dans le champ « impacted-process » du fichier de contrôle du paquet. Par exemple, pour WinSCP, ajoutez : `winscp.exe`

8. Testez le paquet sur votre ordinateur.

9. Si le test est concluant, téléchargez le paquet sur le serveur WAPT :

> WAPT Console > Packages Inventory > Import Package > Build and Upload Package

> Sélectionnez ensuite le paquet que vous êtes en train de modifier.

10. Déployez le package sur les machines cibles afin de désinstaller le logiciel.

## 5.2. Gestion de conflit entre la configuration Wapt et les GPO

Certains GPOs appliqués par le contrôleur de domaine peuvent entrer en conflit avec les stratégies de configuration appliquées par WAPT.

Fondamentalement, ce qui se passera, c’est qu’une politique réinitialisera de manière récurrente l’autre politique. Si les scripts d’audit de WAPT vérifient ces options de configuration, les audits oscilleront constamment entre |OK| et |ERROR|.

En règle générale, si vous disposez de la version WAPT Enterprise qui implémente audit, vous obtiendrez les meilleurs résultats en utilisant WAPT pour appliquer des politiques pour les 3 raisons suivantes :

- Il peut y avoir une différence entre les OU que l’Active Directory affiche dans la console standard RSAT et l’endroit où le point final sait réellement qu’il se trouve dans l’arborescence de l’Active Directory. Cela explique en grande partie pourquoi vous pensez parfois appliquer une GPO sur un hôte d’une OU, et que vous constatez ensuite que la politique ne s’est pas appliquée à l’hôte ou à certains membres d’une OU. L’agent WAPT sait exactement de quelles OU l’appareil est membre.

- Windows ne dispose d’aucun moyen natif de signaler si les GPO ont été correctement appliqués ou non. Lorsque l’on utilise WAPT pour configurer des stratégies, la fonction d’audit du paquet de configuration WAPT est un moyen simple de s’assurer que la stratégie a été correctement appliquée. La politique apparaîtra dans la console WAPT comme |OK| ou |ERROR|. Si vous utilisez les instructions `print()` dans votre script d’audit, vous pouvez alors savoir où et pourquoi votre configuration a échoué.

- Enfin, les GPO de configuration qui intègrent des informations confidentielles telles que des identifiants et des mots de passe peuvent être facilement interceptés par un acteur de la menace. WAPT inclut une méthode simple qui permet de chiffrer des données sensibles qui ne peuvent alors être déchiffrées que par le point de destination.

C’est pourquoi nous recommandons d’utiliser les paquets de configuration WAPT plutôt que les GPO pour déployer les politiques dans vos flottes, dans la mesure du possible.

## 5.3. J’ai déployé un paquet logiciel sur une unité d’organisation (OU), mais je souhaiterais exclure certains postes

Malheureusement, en raison de l’héritage OU, il n’est pas possible d’exclure certaines machines nativement. Si un paquet est en dépendance ou en conflit, il n’est pas possible d’exclure certaines machines de manière native.

Dans ce type de figure il vous reste deux solutions :

1/ Installation manuelle : Si vous souhaitez que le paquet soit installé uniquement sur des postes de travail spécifiques au sein de l’OU, vous devez le retirer du déploiement au niveau de l’OU et l’installer manuellement sur les machines ciblées.

2/ Utilisation d’un méta-paquet : Vous pouvez également créer un méta-paquet qui inclut une logique personnalisée pour cibler ou exclure des machines spécifiques. Cette approche vous permet de contourner les limitations de l’héritage des OU. Vous trouverez plus d’informations sur la façon de créer un méta-paquet ici.

## 5.4. Installation ayant besoin d’un redémarrage système

- Il se peut que vous ayez besoin d’installer une application impliquant un redémarrage système.

Voici un exemple de code qui vous permet de le faire :

    from setuphelpers import *

    def install():
        last_boot = str(host_metrics()['last_bootup_time']).rsplit('.',1)[0]
        file_last_bootup_time = r'C:\last_bootup_time'

        if not isfile(file_last_bootup_time):
            print('first time installation is executed')

          # Insert here the code to be executed before the reboot.

            with open(file_last_bootup_time,'w') as f:
                f.write(last_boot)
            return "NEEDREBOOT"

        else:

            with open(file_last_bootup_time,'r') as f:
                data = f.read()

            if data == last_boot:
                print("Install already executed but system has not rebooted")
                return "NEEDREBOOT"
            else:
                print("Install already executed and system rebooted, I can continue")

                # Insert here the code to be executed after the reboot.

## 5.5. Mise à jour des paquets WAPT de Python 2 à Python 3

Attention

Avec WAPT 2.0, le fonctionnement interne de WAPT est passé à python3. Les paquets WAPT DOIVENT aussi suivre la nouvelle syntaxe python3.

Les principales différences de syntaxe
Syntaxe | Python 2 | Python 3
--- | --- | ---
print | `print'Hello'` | `print('Hello')`
unicode string | `ur` | `r`
opérateurs | `<> <=> !=` | `!=`
Accès à la base de registre Windows | `_winreg` | `winreg`

Indication

Pour plus d’informations, visitez le site :

- https://python-future.org/compatible_idioms.html.

- https://blog.couchbase.com/tips-and-tricks-for-upgrading-from-python-2-to-python-3/.

## 5.6. Le service wapt crash durant une installation ou suppression de paquet

Certains clients ont signalé des pannes du service wapt.

En creusant un peu, nous avons réalisé que ces problèmes étaient dus au fait que Bitdefender interdisait l’exécution de Powershell. En conséquence, Bitdefender arrêtait le processus du serveur wapt.

Ceci peut être étendu à tous les programmes antivirus. Restez vigilant.

## 5.7. Problèmes avec la création de paquet

### 5.7.1. Problèmes de droits avec PyScripter

Lorsqu’on souhaite tester l’installation d’un paquet sur son PC de développement de paquet à partir de PyScripter, on obtient le message :

Lancez PyScripter en utilisant un compte Local Administrator et refaites l’action souhaitée.

### 5.7.2. Mon paquet WAPT est trop volumineux et je n’arrive pas à l’uploader sur le dépôt

Un message « Stream write error » (Erreur d’écriture du flux) peut apparaître si vous manquez d’espace disque sur la machine qui importe le paquet. En effet, beaucoup d’espace est nécessaire car le paquet est d’abord extrait, puis signé, compilé et enfin téléversé sur le serveur (3 fois la taille du paquet est nécessaire). Dans ce cas, veuillez appliquer la procédure suivante.

Quand un paquet est trop volumineux, il faut en général lancer le builder localement puis l’uploader avec WinSCP.

- Assembler le paquet dans PyScripter ou manuellement.

Indication

Le paquet WAPT dans `C:\waptdev`.

- Télécharger et installer WinSCP

- En utilisant WinSCP, uploadez votre paquet dans le dépôt selon la version du référentiel WAPT..

- Une fois le téléchargement terminé, recréer le fichier d’index `Packages` sur le dépôt WAPT en utilisant la commande suivante et en remplaçant repository par le repository location selon la version du dépôt WAPT.

    wapt-scanpackages repository

### 5.7.3. Impossible de créer un fichier

WAPT - Impossible de créer un fichier

Vous pouvez essayer de nettoyer le cache ici : Appdatalocalwaptconsolecache.

### 5.7.4. Erreur de violation d’accès lors de la re-signature du paquet WAPT

Si l’erreur Access violation apparaît, c’est parce que le paquet est trop gros.

Éditez le paquet et suivez cette procédure.

### 5.7.5. Paquet WAPT en erreur

#### 5.7.5.1. Problème d’installation d’un paquet WAPT

J’ai un paquet WAPT qui renvoie une erreur et le logiciel n’est pas installé sur l’ordinateur lorsque je vais physiquement vérifier sur l’ordinateur.

##### 5.7.5.1.1. Explication

Une erreur s’est produite lors de l’exécution du `setup.py`.

Vous pouvez lire et analyser les messages d’erreur retournés dans la Console WAPT et tenter de les comprendre et de les résoudre.

L’installation des paquets sera retentée à chaque upgrade jusqu’à ce que le paquet ne génère plus d’erreur.

##### 5.7.5.1.2. Solution

- Si WAPT fournit un code d’erreur, chercher ce code d’erreur sur Internet.

  Exemple avec un MSI : 1618 : Une autre installation est déjà en cours. Un redémarrage devrait solutionner le problème.

Note

Les différents codes d’erreur MSI sont disponibles ici.

- Se déplacer physiquement sur la machine en erreur et relancer l’installation silencieuse en ligne de commande. Vérifier ensuite que le logiciel à bien été installé.

Attention

Une fois l’installation silencieuse lancée, ne pas intervenir.

L’objectif est de reproduire le comportement de l’Agent WAPT.

- Si l’installation fonctionne en mode silencieux, en contexte utilisateur, cela peut signifier que l’installeur ne supporte pas l’installation en compte SYSTEM.

- Si cela ne fonctionne toujours pas, lancer l’installation manuellement. Il est possible qu’une erreur apparaisse indiquant explicitement le problème. Exemple (Dépendance manquante : .Net , Java, etc..).

- Il est possible que l’installeur ne supporte pas l’écrasement d’une installation précédente, alors prévoir la désinstallation des anciennes version avant d’installer la nouvelle version.

#### 5.7.5.2. Erreur "timed out after seconds with output “600.0” »

Certains paquets dans la Console WAPT retournent l’erreur :

    "Error timed out after seconds with output '600.0'"

##### 5.7.5.2.1. Explication

Par défaut lors d’une installation (avec run, install_msi_if_needed ou install_exe_if_needed) WAPT va attendre 600 secondes que l’installeur lui rende la main.

Si l’installeur n’a pas terminé dans ce délai, WAPT coupera l’installation en « cours.

##### 5.7.5.2.2. Solution

Si vous tentez d’installer un gros logiciel (Office, Solidworks, Libreoffice Katia, Adobe Creative Suite), il est possible que l’intervalle de 600 secondes ne soit pas suffisant.

Vous devez alors, augmenter cette valeur avec l’argument timeout, ex:`timeout` = `1200`.

    run('"setup.exe" /adminfile office2010noreboot.MSP', timeout = 1200)

#### 5.7.5.3. Erreur "has been installed but the uninstall key can not be found"

Certains paquets dans la Console WAPT retournent l’erreur :

    XXX has been installed but the uninstall key can not be found.

##### 5.7.5.3.1. Explication

WAPT s’appuie sur Windows pour installer les binaires .msi avec install_msi_if_need et les binaires .exe avec install_exe_if_need ».

Par défaut, WAPT accepte les codes de retour : 0 (OK) et 3010 (redémarrage nécessaire), et il vérifie la clé de désinstallation résultante (uninstall key).

Malheureusement, nous ne pouvons pas faire entièrement confiance à ces codes de retour, c’est pourquoi WAPT effectue des contrôles supplémentaires après l’installation pour s’assurer que tout s’est bien passé :

- Il vérifie la présence de la clé de désinstallation sur la machine.

- Il vérifie que la version est bien égale ou supérieure à celle renseignée du fichier `control`.

- Si ce n’est pas le cas, il en déduit que le logiciel n’est peut-être pas présent sur la machine.

La fonction bascule alors volontairement le paquet WAPT en erreur. L’installation sera retentée lors de chaque upgrade, jusqu’à ce que le paquet WAPT ne génère plus d’erreur.

##### 5.7.5.3.2. Solution

Attention

Avant toute chose, il convient de se connecter sur la machine en erreur et de vérifier manuellement si le logiciel est correctement installé . Si ce n’est pas le cas, se référer à la documentation sur les problèmes d’installation d’un paquet..

- Si le logiciel est bien installé, cela signifie peut être que la clé de désinstallation ou la version fournie dans le paquet n’est pas bonne.

- Récupérer la bonne clé de désinstallation et corriger le paquet WAPT en conséquence.

- Si l’erreur se produit avec install_msi_if_needed cela signifie que l’installeur MSI est mal conçu et renvoie une mauvaise clé de désinstallation.

#### 5.7.5.4. Erreur "has been installed and the uninstall key found but version is not good"

Certains paquets dans la Console WAPT retournent l’erreur :

    XXX has been installed and the *uninstall key* found but version is not good.

##### 5.7.5.4.1. Explication

Avec les commandes `install_msi_if_needed` or `install_exe_if_needed`, des vérifications supplémentaires sont effectuées pour vérifier que tout s’est bien passé.

Attention

Avant toute chose, il convient de se connecter sur la machine en erreur et de vérifier manuellement si le logiciel est correctement installé . Si ce n’est pas le cas, se référer à la documentation sur les problèmes d’installation d’un paquet..

##### 5.7.5.4.2. Solution : Avec `install_msi_if_needed`

Les informations étant extraites depuis l’installeur MSI, cela signifie que le fichiers MSI ne renvoie pas la bonne version ou que la clé de désinstallation retournée n’est pas la bonne version.

Vous pouvez vérifier en utilisant l’utilitaire de ligne de commande Windows.

    wapt-get list-registry

Si la clé retournée n’est pas celle renseignée dans la partie installation du fichier `setup.py` , il n’est pas possible d’utiliser la fonction `install_msi_if_needed`.

Vous DEVEZ revoir la section install de votre `setup.py`, utiliser la fonction `run()` et gérer manuellement les exceptions.

##### 5.7.5.4.3. Solution : avec `install_exe_if_need`

Cela signifie probablement que la version renseignée dans la fonction install_exe_if_needed n’est pas la bonne. Corriger le paquet WAPT en conséquence.

Note

Si l’argument `min_version` n’a pas été renseigné, WAPT va tenter de récupérer automatiquement la version depuis l’installeur .exe.

Pour vérifier la clé de désinstallation utilisée et le numéro de version, utiliser la commande :

    wapt-get list-registry

Si aucune version n’est fournie avec la commande list-registry, cela signifie que la clé de désinstallation du logiciel ne fournit pas de version.

Il existe deux solutions :

- Utiliser l’argument `get_version` pour fournir un chemin vers une autre `uninstallkey`.

    def install():

       def versnaps2(key):
           return key['name'].replace('NAPS2 ','')

       install_exe_if_needed('naps2-5.3.3-setup.exe',silentflags='/VERYSILENT',key='NAPS2 (Not Another PDF Scanner 2)_is1',get_version=versnaps2)

- Fournir une valeur vide en argument pour `min_version` afin d’indiquer à WAPT qu’aucune version n’est à vérifier.

    min_version=' '

Attention

Avec cette méthode on ne vérifiera plus la version lors de mise à jour !

#### 5.7.5.5. Erreur "DNSName values should be passed as an A-label string"

    FATAL ERROR : ValueError: DNSName values should be passed as an A-label string. This means unicode characters should be encoded via a library like idna.

Assurez-vous que le nom de machine ne contient pas de caractères spéciaux.