wix – comment supprimer un dossier non vide

J’ai lu tous les sujets sur ce site avec un problème comme celui-ci, mais je ne trouve pas ce dont j’ai besoin.

J’ai deux versions d’un programme: ancien et nouveau. Dans l’ancienne version, j’ai le dossier F1. Dans la nouvelle version, je n’ai pas ce dossier f1.

Lorsque l’installateur du nouveau programme détecte l’ancienne version, il supprime cette ancienne version, mais pas le dossier f1.

Comment puis-je supprimer f1 de l’installateur de la nouvelle version?

     

ne fonctionne pas = (

Vous devriez extraire l’ élément RemoveFolderEx dans UtilExtension . Il fait exactement ce que tu veux. Bob Arnson a déjà blogué à ce sujet.

    

Cela fonctionne en écrivant des lignes temporaires dans la table RemoveFile . Cependant, il existe des ressortingctions d’utilisation, comme indiqué dans le manuel:

Dans la mesure où cela peut affecter considérablement l’évaluation du coût de fichier de Windows Installer, les lignes temporaires doivent être écrites avant l’action standard CostInitialize. Malheureusement, MSI ne crée pas de propriétés pour la hiérarchie de l’annuaire dans votre package avant, dans l’action CostFinalize.

Une solution de contournement simple pour un cas d’utilisation typique de la suppression d’un dossier lors de la désinstallation consiste à écrire le chemin du répertoire dans le registre et à le charger lors de la désinstallation.

Si vous utilisez des actions personnalisées pour définir des propriétés, assurez-vous qu’elles sont planifiées avant l’action personnalisée WixRemoveFoldersEx.

Et aussi dans le post de Bob:

Comme l’ajout de répertoires et de fichiers à supprimer affecte le coût de fichier de MSI, RemoveFolderEx doit faire son travail avant de calculer. Malheureusement, MSI ne configure pas les propriétés des répertoires cibles tant que le chiffrage n’est pas terminé.

Si vous avez déjà enregistré votre chemin d’installation précédent (Rob explique comment procéder ici ) dans le registre, tout va bien, car l’action AppSearch s’exécute avant CostInitialize.