Suppression de fichiers lors de la désinstallation de WiX

Lors de la désinstallation de mon application, j’aimerais configurer le programme d’installation de Wix pour supprimer tous les fichiers ajoutés après l’installation d’origine . Il semble que le programme de désinstallation supprime uniquement les répertoires et les fichiers installés à l’origine à partir du fichier MSI et qu’il laisse tout ce qui a été ajouté ultérieurement dans le dossier de l’application. En d’autres termes, je voudrais purger le répertoire lors de la désinstallation. Comment je fais ça?

Utilisez l’ élément RemoveFile avec On = ” uninstall “. Voici un exemple:

        

Mettre à jour

Cela n’a pas fonctionné à 100%. Il a supprimé les fichiers, mais aucun des répertoires supplémentaires – ceux créés après l’installation – n’a été supprimé. Des pensées à ce sujet? – pribeiro

Malheureusement, Windows Installer ne prend pas en charge la suppression des répertoires contenant des sous-répertoires. Dans ce cas, vous devez recourir à une action personnalisée. Ou, si vous savez quels sont les sous-dossiers, créez un groupe d’éléments RemoveFolder et RemoveFile.

Utilisez l’élément RemoveFolderEx de l’extension Util dans WiX.
Avec cette approche, tous les sous-répertoires sont également supprimés (par opposition à l’ utilisation de l’élément RemoveFile directement ). Cet élément ajoute des lignes temporaires à la table RemoveFile et RemoveFolder de la firebase database MSI.

Pour ce faire, j’ai simplement créé une action personnalisée à appeler lors de la désinstallation.

Le code WiX ressemblera à ceci:

               $InstallerCustomActions=2 $InstallerCustomActions=2  

Le code de la méthode OnBeforeUninstall dans InstallerCustomActions.DLL ressemblera à ceci (en VB).

 Protected Overrides Sub OnBeforeUninstall(ByVal savedState As System.Collections.IDictionary) MyBase.OnBeforeUninstall(savedState) Try Dim CommonAppData As Ssortingng = Me.Context.Parameters("CommonAppData") If CommonAppData.StartsWith("\") And Not CommonAppData.StartsWith("\\") Then CommonAppData = "\" + CommonAppData End If Dim targetDir As Ssortingng = Me.Context.Parameters("targetDir") If targetDir.StartsWith("\") And Not targetDir.StartsWith("\\") Then targetDir = "\" + targetDir End If DeleteFile("", targetDir) 'delete from bin directory DeleteDirectory("*.*", "") 'delete any extra directories created by program Catch End Try End Sub Private Sub DeleteFile(ByVal searchPattern As Ssortingng, ByVal deleteDir As Ssortingng) Try For Each fileName As Ssortingng In Directory.GetFiles(deleteDir, searchPattern) File.Delete(fileName) Next Catch End Try End Sub Private Sub DeleteDirectory(ByVal searchPattern As Ssortingng, ByVal deleteDir As Ssortingng) Try For Each dirName As Ssortingng In Directory.GetDirectories(deleteDir, searchPattern) Directory.Delete(dirName) Next Catch End Try End Sub 

Pas un expert WIX, mais une solution possible (plus simple?) Serait-elle d’exécuter l’ action personnalisée Quiet Execution qui fait partie des extensions intégrées de WIX?

Peut exécuter la commande rmdir MS DOS avec les options / S et / Q.

  

Et l’action personnalisée qui fait le travail est simple:

  

Ensuite, vous devrez modifier le InstallExecuteSequence comme documenté de nombreux endroits.

Mise à jour: A eu des problèmes avec cette approche. Terminé en faisant une tâche personnalisée à la place, mais considère toujours cela comme une solution viable, mais sans obtenir les détails pour fonctionner.

Voici une variante de la suggestion de @tronda. Je supprime un fichier “install.log” créé par une autre action personnalisée lors de la désinstallation:

     REMOVE="ALL"    

Si j’ai bien compris, je ne peux pas utiliser “RemoveFile” car ce fichier est créé après l’installation et ne fait pas partie d’un groupe de composants.

Ce serait une réponse plus complète à la suggestion de @Pavel , pour moi, cela fonctionne à 100%:

                

Et sous l’élément de produit:

    

Cette approche définit une valeur de registre avec le chemin souhaité du dossier à supprimer lors de la désinstallation. À la fin, INSTALLFOLDER et le dossier de registre sont supprimés du système. Notez que le chemin d’access au registre peut se trouver sur d’autres sites de stockage ou autres.