Je viens de créer un utilitaire qui fait le ménage dans les mises à jours de Windows
- il supprime les fichiers de désinstallations de hotfix (C:\windows\$NtUninstallKBxxxxxx$)
- il supprime les fichiers log qui correspondent à d'anciennes désinstallations de hotfix
- il supprime les clés de registre qui correspondent à d'anciennes désinstallations de hotfix
- il supprime les fichiers de désinstallations des correctifs windows installer qui se trouvent dans C:\WINDOWS\INSTALLER
Pour le réaliser, j'ai utilisé :
- - des tableaux à 1 ou plusieurs dimensions
 - une fenetre "personnalisée"
 - des barres de progression
► Afficher le texte
Code : Tout sélectionner
;=======================================================================================================================
; appel des librairies
;=======================================================================================================================
#Include <File.au3>
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
#include <ProgressConstants.au3>
#include <WindowsConstants.au3>
;=======================================================================================================================
; déclaration des variables
;=======================================================================================================================
Opt("MustDeclareVars", 1)
; définition des constantes
GLOBAL Const $constUninstall = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
GLOBAL Const $constARPCache = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\ARPCache\"
; variables spécifiques à la fenetre
LOCAL $supprimer, $annuler, $reponse, $strFin, $afficher, $fermer
LOCAL $progresshot, $progresslog, $progresscle, $progressmsp
LOCAL $intTOP = 20
LOCAL $intTOPhot, $intTOPlog, $intTOPcle, $intTOPmsp
LOCAL $intHauteur = 300
LOCAL $intNombre = 0
LOCAL $labelMessage
; définition des couleurs
LOCAL $color_BOUTON = "0x0000FF"
LOCAL $color_FOND = "0x595454"
LOCAL $color_TEXTE = "0xFFF380"
LOCAL $color_FENETRE = "0x737CA1"
LOCAL $color_AFFICHER = "0xF75D59"
LOCAL $color_MESSAGE = "0x347C2C"
LOCAL $color_CADRE = "0xC9C299"
; définition des tableaux
GLOBAL $arrHotfix[1][1]
GLOBAL $arrLogs[1]
GLOBAL $arrRegistre[1][1]
GLOBAL $arrMsp[1]
; définition des compteurs
LOCAL $ctrHot
LOCAL $ctrLog
LOCAL $ctrCle
LOCAL $ctrMsp
; autres variables
LOCAL $strAfficher, $intLongueur
;=======================================================================================================================
; début du programme
;=======================================================================================================================
; on prépare le message à afficher
$strAfficher = "Recherche des « hotfix » en cours ..."
; on calcule la longueur du message
$intLongueur = StringLen($strAfficher) * 9
; on affiche le message
SplashTextOn("", $strAfficher, $intLongueur, 70, -1, -1, 0 + 1 + 16 + 32, "Times New Roman", 12, 800)
; on met une pause pour que l'utilisateur puisse lire le message
Sleep(1000)
;-----------------------------------------------------------
; on appelle la fonction de recherche des HOTFIX installés
;-----------------------------------------------------------
; on stocke le nombre de hotfix dans la première case du tableau
$arrHotfix[0][0] = 0
; on appelle la fonction
_ListeHotfix(@WindowsDir)
;-----------------------------------------------------------
; on appelle la fonction de recherche des logs HOTFIX orphelins
;-----------------------------------------------------------
; on stocke le nombre de logs hotfix dans la première case du tableau
$arrLogs[0] = 0
; on appelle la fonction
_ListeLogs(@WindowsDir)
;-----------------------------------------------------------
; on appelle la fonction de recherche des clés de registre
;-----------------------------------------------------------
; on stocke le nombre de clés de registre dans la première case du tableau
$arrRegistre[0][0] = 0
; on appelle la fonction pour la ruche Uninstall
_ListeRegistre($constUninstall, "OUI")
; on appelle la fonction pour la ruche ARPCache
_ListeRegistre($constARPCache, "NON")
;-----------------------------------------------------------
; on appelle la fonction de recherche des fichiers msp
;-----------------------------------------------------------
; on stocke le nombre de fichiers msp dans la première case du tableau
$arrMsp[0] = 0
; on appelle la fonction
_ListeMsp(@WindowsDir & "\Installer\")
; on efface le message
SplashOff()
;-----------------------------------------------------------
; On ouvre la boite de dialogue
;-----------------------------------------------------------
GUICreate("Désinstallation des HOTFIX", 400, $intHauteur, -1, -1, $WS_EX_CLIENTEDGE)
; on affiche le label des HOTFIX
GUICtrlCreateLabel("Nombre de désinstallations de HOTFIX :", 20, $intTOP, 250, 20, 0x01)
; on change la couleur du fond, la couleur du texte et les attributs de la police
GUICtrlSetBkColor ( -1, $color_FOND )
GUICtrlSetColor ( -1, $color_TEXTE )
GUICtrlSetFont ( -1, 9, 800, 4)
; on affiche le nombre de HOTFIX installés
GUICtrlCreateLabel($arrHotfix[0][0], 270, $intTOP, 40, 20, 0x01)
GUICtrlSetBkColor ( -1, $color_AFFICHER )
GUICtrlSetColor ( -1, $color_TEXTE )
GUICtrlSetFont ( -1, 10, 800)
; on sauvegarde la position pour la barre de progression
If $arrHotfix[0][0] > 0 Then $intTOPhot = $intTOP + 20
$intTOP = $intTOP + 40
; on affiche le label des LOGS de hotfix
GUICtrlCreateLabel("Nombre de LOG de HOTFIX orphelins :", 20, $intTOP, 250, 20, 0x01)
; on change la couleur du fond, la couleur du texte et les attributs de la police
GUICtrlSetBkColor ( -1, $color_FOND )
GUICtrlSetColor ( -1, $color_TEXTE )
GUICtrlSetFont ( -1, 9, 800, 4)
; on affiche le nombre de LOG de hotfix
GUICtrlCreateLabel($arrLogs[0], 270, $intTOP, 40, 20, 0x01)
GUICtrlSetBkColor ( -1, $color_AFFICHER )
GUICtrlSetColor ( -1, $color_TEXTE )
GUICtrlSetFont ( -1, 10, 800)
; on sauvegarde la position pour la barre de progression
If $arrLogs[0] > 0 Then $intTOPlog = $intTOP + 20
$intTOP = $intTOP + 40
; on affiche le label des clés de registre orphelines
GUICtrlCreateLabel("Nombre de clés de registre orphelines :", 20, $intTOP, 250, 20, 0x01)
; on change la couleur du fond, la couleur du texte et les attributs de la police
GUICtrlSetBkColor ( -1, $color_FOND )
GUICtrlSetColor ( -1, $color_TEXTE )
GUICtrlSetFont ( -1, 9, 800, 4)
; on affiche le nombre de clés de registre orphelines
GUICtrlCreateLabel($arrRegistre[0][0], 270, $intTOP, 40, 20, 0x01)
GUICtrlSetBkColor ( -1, $color_AFFICHER )
GUICtrlSetColor ( -1, $color_TEXTE )
GUICtrlSetFont ( -1, 10, 800)
; on sauvegarde la position pour la barre de progression
If $arrRegistre[0][0] > 0 Then $intTOPcle = $intTOP + 20
$intTOP = $intTOP + 40
; on affiche le label des fichiers MSP
GUICtrlCreateLabel("Nombre de correctifs Windows Installer :", 20, $intTOP, 250, 20, 0x01)
; on change la couleur du fond, la couleur du texte et les attributs de la police
GUICtrlSetBkColor ( -1, $color_FOND )
GUICtrlSetColor ( -1, $color_TEXTE )
GUICtrlSetFont ( -1, 9, 800, 4)
; on affiche le nombre de MSP de hotfix
GUICtrlCreateLabel($arrMsp[0], 270, $intTOP, 40, 20, 0x01)
GUICtrlSetBkColor ( -1, $color_AFFICHER )
GUICtrlSetColor ( -1, $color_TEXTE )
GUICtrlSetFont ( -1, 10, 800)
; on sauvegarde la position pour la barre de progression
If $arrMsp[0] > 0 Then $intTOPmsp = $intTOP + 20
;-----------------------------------------------------------
; On prépare le bas de la fenetre
;-----------------------------------------------------------
; on prépare le label des messages
$intTOP = $intTOP + 50
$labelMessage = GUICtrlCreateLabel("", 20, $intTOP, 360, 15, 0x01)
; on change la couleur du texte et les attributs de la police
GUICtrlSetBkColor ( $labelMessage, $color_CADRE )
GUICtrlSetColor ( $labelMessage, $color_MESSAGE )
GUICtrlSetFont ( $labelMessage, 9, 450, 2)
$intTOP = $intTOP + 40
; on affiche le bouton AFFICHER
$afficher = GUICtrlCreateButton("Afficher", 20, $intTOP - 10, 80, 30)
; on change la couleur du texte et les attributs de la police
GUICtrlSetColor ( $afficher, $color_BOUTON )
GUICtrlSetFont ( $afficher, 9, 800)
; on affiche le bouton ANNULER et on lui attribut la valeur PAR DEFAUT
$annuler = GUICtrlCreateButton("Annuler", 225, $intTOP - 10, 70, 30)
GUICtrlSetState ( $annuler, $GUI_DEFBUTTON)
; on change la couleur du texte et les attributs de la police
GUICtrlSetColor ( $annuler, $color_BOUTON )
GUICtrlSetFont ( $annuler, 9, 800)
; on affiche le bouton FERMER
$fermer = GUICtrlCreateButton("Fermer", 305, $intTOP - 10, 80, 30)
; on change la couleur du texte et les attributs de la police
GUICtrlSetColor ( $fermer, $color_BOUTON )
GUICtrlSetFont ( $fermer, 9, 800)
; on cache le bouton FERMER
GUICtrlSetState ( $fermer, $GUI_DISABLE + $GUI_HIDE)
; on affiche le bouton SUPPRIMER
$supprimer = GUICtrlCreateButton("Supprimer", 305, $intTOP - 10, 80, 30)
; on change la couleur du texte et les attributs de la police
GUICtrlSetColor ( $supprimer, $color_BOUTON )
GUICtrlSetFont ( $supprimer, 9, 800)
; on change la couleur de fond
GUISetBkColor($color_FENETRE)
; on valide l'affichage de la fenetre
GUISetState()
            
; on récupère le nombre de HOTFIX + le nombre de LOG + le nombre de CLES
$intNombre = $arrHotfix[0][0] + $arrLogs[0] + $arrRegistre[0][0] + $arrMsp[0]
If $intNombre = 0 Then GUICtrlSetState ( $supprimer, $GUI_DISABLE)
;-----------------------------------------------------------
; On traite les évènements de la fenetre
;-----------------------------------------------------------
Do
    $reponse = GUIGetMsg()
    $strFin = "NON"
    Select
        Case $reponse = $supprimer
            
            ; on désactive les boutons ANNULER et SUPPRIMER
            GUICtrlSetState ( $afficher, $GUI_DISABLE)
            GUICtrlSetState ( $annuler, $GUI_DISABLE)
            GUICtrlSetState ( $supprimer, $GUI_DISABLE)
            
            ; on vérifie si on a trouvé des hotfix
            If $arrHotfix[0][0] > 0 Then
                ; on affiche une barre de progression
                $progresshot = GUICtrlCreateProgress(20, $intTOPhot, 290, 10)
                ; on traite chaque hotfix
                For $ctrHot = 1 to ($arrHotfix[0][0]) Step 1
                    ; on met à jour la barre de progression
                    GUICtrlSetData($progresshot, $ctrHot * (100 / $arrHotfix[0][0]))
                    ; on affiche un message pour informer l'utilisateur
                    GUICtrlSetData ( $labelMessage, "Suppression de « " & $arrHotfix[$ctrHot][1] & " »...")
                    ; on appelle la fonction de suppression du HOTFIX
                    _SupprimerHotfix($arrHotfix[$ctrHot][0], $arrHotfix[$ctrHot][1])
                Next
            EndIf
            
            ; on vérifie si on a trouvé des logs orphelins
            If $arrLogs[0] > 0 Then
                ; on affiche une barre de progression
                $progresslog = GUICtrlCreateProgress(20, $intTOPlog, 290, 10)
                ; on traite chaque log orphelin
                For $ctrLog = 1 to ($arrLogs[0]) Step 1
                    ; on met à jour la barre de progression
                    GUICtrlSetData($progresslog, $ctrLog * (100 / $arrLogs[0]))
                    ; on affiche un message pour informer l'utilisateur
                    GUICtrlSetData ( $labelMessage, "Suppression de « " & $arrLogs[$ctrLog] & " »...")
                    ; on appelle la fonction de suppression de la LOG
                    _SupprimerLogs($arrLogs[$ctrLog])
                Next
            EndIf
            
            ; on vérifie si on a trouvé des clés de registre orphelines
            If $arrRegistre[0][0] > 0 Then
                ; on affiche une barre de progression
                $progresscle = GUICtrlCreateProgress(20, $intTOPcle, 290, 10)
                ; on traite chaque clé de registre orpheline
                For $ctrCle = 1 to ($arrRegistre[0][0]) Step 1
                    ; on met à jour la barre de progression
                    GUICtrlSetData($progresscle, $ctrCle * (100 / $arrRegistre[0][0]))
                    ; on affiche un message pour informer l'utilisateur
                    GUICtrlSetData ( $labelMessage, "Suppression de « " & $arrRegistre[$ctrCle][1] & " »...")
                    ; on appelle la fonction de suppression de la clé de registre
                    _SupprimerCles($arrRegistre[$ctrCle][0], $arrRegistre[$ctrCle][1])
                Next
            EndIf
            
            ; on vérifie si on a trouvé des fichiers msps
            If $arrMsp[0] > 0 Then
                ; on affiche une barre de progression
                $progressmsp = GUICtrlCreateProgress(20, $intTOPmsp, 290, 10)
                ; on traite chaque msp orphelin
                For $ctrMsp = 1 to ($arrMsp[0]) Step 1
                    ; on met à jour la barre de progression
                    GUICtrlSetData($progressmsp, $ctrMsp * (100 / $arrMsp[0]))
                    ; on affiche un message pour informer l'utilisateur
                    GUICtrlSetData ( $labelMessage, "Suppression de « " & $arrMsp[$ctrMsp] & " »...")
                    ; on appelle la fonction de suppression du HOTFIX
                    _SupprimerMsp($arrMsp[$ctrMsp])
                Next
            EndIf
            
            ; on supprime les boutons
            GUICtrlDelete($afficher)
            GUICtrlDelete($annuler)
            GUICtrlDelete($supprimer)
            
            ;
            ; on affiche un message de fin
            GUICtrlSetData ( $labelMessage, "Suppressions terminées !")
            ; on met une pause pour temporiser l'affichage
            GUICtrlSetState ( $fermer, $GUI_ENABLE + $GUI_SHOW)
            ;sleep(2000)
            
        Case $reponse = $afficher
            _ArrayDisplay($arrHotfix, "Liste des Hotfix")
            _ArrayDisplay($arrLogs, "Liste des Logs orphelins")
            _ArrayDisplay($arrRegistre, "Liste des clés de registres")
            _ArrayDisplay($arrMsp, "Liste des correctifs Windows Installer")
            
        Case $reponse = $fermer
            $strFin = "OUI"
    EndSelect
Until $reponse = $annuler or $strFin = "OUI"
;=======================================================================================================================
; fonction de recherche des dossiers HOTFIX
;=======================================================================================================================
Func _ListeHotfix($strDossierHot)
    LOCAL $strListeHot = FileFindFirstFile($strDossierHot & "\*")
    LOCAL $strNomHot
    LOCAL $intInsererHot
    LOCAL $strVerifierHot
    LOCAL $intLongueurHot
    LOCAL $intDebutHot
    
    ; on va parcourir les dossiers un par un
    While 1
    
        ; on récupère le nom du fichier
        $strNomHot = FileFindNextFile($strListeHot)
        If @error Then ExitLoop
        
        ; on prépare le nom complet (dossier + fichier)
        $strVerifierHot = $strDossierHot & "\" & $strNomHot
        
        ; on vérifie si c'est un dossier ou un fichier
        If StringInStr(FileGetAttrib($strVerifierHot), "D") Then
            
            ; on vérifie si c'est un dossier hotfix
            If StringLeft( $strNomHot, 3) = "$Nt" Then
        
                ;on récupère le nombre de dossiers
                $intInsererHot = $arrHotfix[0][0] + 1
                ; on redimensionne le tableau des dossiers
                ReDim $arrHotfix[$intInsererHot + 1][2]
                ; on stocke le nom du dossier
                $arrHotfix[$intInsererHot][0] = $strDossierHot & "\" & $strNomHot
                ; on vérifie le type de hotfix
                If StringMid( $strNomHot, 4, 9) = "Uninstall" Then
                    $intDebutHot = 13
                Else
                    $intDebutHot = 4
                EndIf
                ; on stocke le nom du hotfix
                $intLongueurHot = StringLen($strNomHot) - $intDebutHot
                $arrHotfix[$intInsererHot][1] = StringMid($strNomHot, $intDebutHot, $intLongueurHot)
                ; on enregistre le nombre de dossiers
                $arrHotfix[0][0] = $intInsererHot
                
            EndIf
            
        EndIf
        
    WEnd
    
    ; on ferme la liste des dossiers et fichiers
    FileClose($strListeHot)
EndFunc
;=======================================================================================================================
; fonction de recherche des LOGS hotfix
;=======================================================================================================================
Func _ListeLogs($strDossierLog)
    LOCAL $strListeLog = FileFindFirstFile($strDossierLog & "\*")
    LOCAL $strNomLog
    LOCAL $intInsererLog
    LOCAL $strVerifierLog
    LOCAL $intPresentLog
    LOCAL $intLongueurLog
    LOCAL $strAjouterLog
    ; on va parcourir les fichiers un par un
    While 1
    
        ; on récupère le nom du fichier
        $strNomLog = FileFindNextFile($strListeLog)
        If @error Then ExitLoop
        
        ; on prépare le nom complet (dossier + fichier)
        $strVerifierLog = $strDossierLog & "\" & $strNomLog
        
        ; on vérifie si c'est un dossier ou un fichier
        If Not StringInStr(FileGetAttrib($strVerifierLog), "D") Then
            
            ; on vérifie si c'est un fichier de type log
            If StringRight( $strNomLog, 3) = "log" Then
            
                ; on récupère le nom sans l'extension
                $intLongueurLog = StringLen($strNomLog) - 4
                $strNomLog = StringMid($strNomLog, 1, $intLongueurLog)
                
                ; on vérifie si c'est un log de hotfix
                If StringLeft( $strNomLog, 2) = "kb" Then
                
                    ; on vérifie si le log correspond à un hotfix installé
                    If $arrHotfix[0][0] > 0 Then
                        $intPresentLog = _ArraySearch($arrHotfix, $strNomLog, 0, 0, 0, 0, 1, 1)
                        If @error Then
                            $strAjouterLog = "OUI"
                        Else
                            $strAjouterLog = "NON"
                        EndIf
                    Else
                        $strAjouterLog = "OUI"
                    EndIf
                    
                    ; on vérifie s'il faut ajouter le log dans le tableau
                    If $strAjouterLog = "OUI" Then
                        ;on récupère le nombre de dossiers
                        $intInsererLog = $arrLogs[0] + 1
                        ; on redimensionne le tableau des dossiers
                        ReDim $arrLogs[$intInsererLog + 1]
                        ; on stocke le nom du log
                        $arrLogs[$intInsererLog] = $strNomLog
                        ; on enregistre le nombre de dossiers
                        $arrLogs[0] = $intInsererLog
                        
                    EndIf
                    
                EndIf
                
            EndIf
            
        EndIf
        
    WEnd
    
    ; on ferme la liste des dossiers et fichiers
    FileClose($strListeLog)
    
EndFunc
;=======================================================================================================================
; fonction de recherche des clés de registre
;=======================================================================================================================
Func _ListeRegistre($strRucheCle, $strComparerCle)
    ; définition des variables
    LOCAL $intPresentCle
    LOCAL $intInsererCle
    LOCAL $intCompteurCle = 1
    LOCAL $strNomCle
    LOCAL $strAjouterCle
    
    ; on va traiter chaque clé une par une
    While 1
    
        ; on récupère le nom de la clé
        $strNomCle = RegEnumKey($strRucheCle, $intCompteurCle)
        If @error Then ExitLoop
        
        ; on vérifie si le nom de la clé commence par KB
        If StringLeft( $strNomCle, 2) = "KB" Then
            ; on vérifie si on doit comparer la cle de registre aux valeurs des 2 autres tableaux
            If $strComparerCle = "OUI" Then
                ; on vérifie si la cle de registre correspond à un hotfix installé
                If $arrHotfix[0][0] > 0 Then
                    $intPresentCle = _ArraySearch($arrHotfix, $strNomCle, 0, 0, 0, 0, 1, 1)
                    If @error Then
                        $strAjouterCle = "OUI"
                    Else
                        $strAjouterCle = "NON"
                    EndIf
                Else
                    ; on vérifie si la cle de registre correspond à un log orphelin
                    If $arrLogs[0] > 0 Then
                        $intPresentCle = _ArraySearch($arrLogs, $strNomCle, 0, 0, 0, 0, 1, 1)
                        If @error Then
                            $strAjouterCle = "OUI"
                        Else
                            $strAjouterCle = "NON"
                        EndIf
                    Else
                        $strAjouterCle = "OUI"
                    EndIf
                EndIf
            Else
                $strAjouterCle = "OUI"
            EndIf
        Else
            ; on vérifie si le nom de la clé contient .KB
            If StringInStr ( $strNomCle, ".KB" , 1) Then
                ; on vérifie si on doit comparer la cle de registre aux valeurs des 2 autres tableaux
                If $strComparerCle = "OUI" Then
                    ; on vérifie si la cle de registre correspond à un hotfix installé
                    If $arrHotfix[0][0] > 0 Then
                        $intPresentCle = _ArraySearch($arrHotfix, $strNomCle, 0, 0, 0, 0, 1, 1)
                        If @error Then
                            $strAjouterCle = "OUI"
                        Else
                            $strAjouterCle = "NON"
                        EndIf
                    Else
                        ; on vérifie si la cle de registre correspond à un log orphelin
                        If $arrLogs[0] > 0 Then
                            $intPresentCle = _ArraySearch($arrLogs, $strNomCle, 0, 0, 0, 0, 1, 1)
                            If @error Then
                                $strAjouterCle = "OUI"
                            Else
                                $strAjouterCle = "NON"
                            EndIf
                        Else
                            $strAjouterCle = "OUI"
                        EndIf
                    EndIf
                Else
                    $strAjouterCle = "OUI"
                EndIf
            Else
                $strAjouterCle = "NON"
            EndIf
        EndIf
        
        ; on vérifie s'il faut ajouter la clé dans le tableau
        If $strAjouterCle = "OUI" Then
            ;on récupère le nombre de clés de registre
            $intInsererCle = $arrRegistre[0][0] + 1
            ; on redimensionne le tableau des clés de registre
            ReDim $arrRegistre[$intInsererCle + 1][2]
            ; on stocke le nom de la ruche
            $arrRegistre[$intInsererCle][0] = $strRucheCle
            ; on stocke le nom de la clé
            $arrRegistre[$intInsererCle][1] = $strNomCle
            ; on enregistre le nombre de clés de registre
            $arrRegistre[0][0] = $intInsererCle
            
        EndIf
        
        $intCompteurCle += 1
    WEnd
    
EndFunc
;=======================================================================================================================
; fonction de recherche des fichiers MSP
;=======================================================================================================================
Func _ListeMsp($strDossierMsp)
    LOCAL $strListeMsp = FileFindFirstFile($strDossierMsp & "*.msp")
    LOCAL $strNomMsp
    LOCAL $intInsererMsp
    LOCAL $strVerifierMsp
    LOCAL $intPresentMsp
    LOCAL $intLongueurMsp
    LOCAL $strAjouterMsp
    
    ; on va parcourir les fichiers un par un
    While 1
    
        ; on récupère le nom du fichier
        $strNomMsp = FileFindNextFile($strListeMsp)
        If @error Then ExitLoop
        
        ; on prépare le nom complet (dossier + fichier)
        $strVerifierMsp = $strDossierMsp & "\" & $strNomMsp
        
        ; on vérifie si c'est un dossier ou un fichier
        If Not StringInStr(FileGetAttrib($strVerifierMsp), "D") Then
            
            ; on récupère le nom sans l'extension
            $intLongueurMsp = StringLen($strNomMsp) - 4
            $strNomMsp = StringMid($strNomMsp, 1, $intLongueurMsp)
            
            ;on récupère le nombre de dossiers
            $intInsererMsp = $arrMsp[0] + 1
            ; on redimensionne le tableau des dossiers
            ReDim $arrMsp[$intInsererMsp + 1]
            ; on stocke le nom du msp
            $arrMsp[$intInsererMsp] = $strNomMsp
            ; on enregistre le nombre de dossiers
            $arrMsp[0] = $intInsererMsp
            
        EndIf
        
    WEnd
    
    ; on ferme la liste des dossiers et fichiers
    FileClose($strListeMsp)
    
EndFunc
;=======================================================================================================================
; fonction de suppression de HOTFIX
;=======================================================================================================================
Func _SupprimerHotfix($strHotDossier, $strHotNom)
    
    ; on supprime le dossier
    DirRemove($strHotDossier, 1)
    
    ; on supprime le fichier LOG
    FileSetAttrib(@WindowsDir & "\" & $strHotNom & ".log", "-RASHNOT")
    FileDelete(@WindowsDir & "\" & $strHotNom & ".log")
    
    ; on met une pause pour temporiser l'affichage
    sleep(100)
    
    ; on supprime la clé de registre
    RegDelete ($constUninstall & $strHotNom)
    
EndFunc
;=======================================================================================================================
; fonction de suppression des logs orphelins
;=======================================================================================================================
Func _SupprimerLogs($strLogsNom)
    
    ; on supprime le fichier LOG
    FileSetAttrib(@WindowsDir & "\" & $strLogsNom & ".log", "-RASHNOT")
    FileDelete(@WindowsDir & "\" & $strLogsNom & ".log")
    
    ; on met une pause pour temporiser l'affichage
    sleep(100)
    
    ; on vérifie si une cle existe dans la base de registre
    If RegRead($constUninstall & $strLogsNom, "") Then
        ; on supprime la clé de registre
        RegDelete ($constUninstall & $strLogsNom)
    EndIf
    
EndFunc
;=======================================================================================================================
; fonction de suppression des clés de registre orphelines
;=======================================================================================================================
Func _SupprimerCles($strClesRuche, $strClesNom)
    
    ; on met une pause pour temporiser l'affichage
    sleep(100)
    
    ; on supprime la clé de registre
    RegDelete ($strClesRuche & $strClesNom)
    
EndFunc
;=======================================================================================================================
; fonction de suppression des fichiers msps
;=======================================================================================================================
Func _SupprimerMsp($strMspNom)
    
    ; on supprime le fichier MSP
    FileSetAttrib(@WindowsDir & "\installer\" & $strMspNom & ".msp", "-RASHNOT")
    FileDelete(@WindowsDir & "\installer\" & $strMspNom & ".msp")
    
    ; on met une pause pour temporiser l'affichage
    sleep(100)
    
EndFunc

 
 
 
 


