WiX, comment empêcher la désinstallation des fichiers alors que nous avons oublié de définir Permanent = “yes”

Nous avons un programme d’installation de produit créé avec Wix, contenant un package de programme (” V1 “) et certains fichiers de configuration. Nous allons maintenant procéder à une mise à niveau majeure avec un nouveau code produit, où l’ancienne version du produit est désinstallée et où ” V2 ” est installé. Ce que nous voulons, c’est enregistrer l’un des fichiers de configuration de la désinstallation, car il est également nécessaire pour le V2. Malheureusement, nous avons oublié de définir l’option Permanent="yes" lors de la livraison de V1 ( lisez cette question pour plus d’informations).

Voici la question: existe-t-il un moyen simple d’empêcher la désinstallation du fichier ? Bien entendu, nous pourrions append une action personnalisée au script pour sauvegarder le fichier avant la désinstallation et une autre action personnalisée pour le restaurer ultérieurement, mais à mon humble avis, cette tâche semble exagérée et pourrait interférer avec d’autres parties du processus d’enregistrement MSI. .

EDIT: Et oui, l’ NeverOverwrite="yes" est déjà défini dans V2, et le comportement est comme je l’ai décrit.

Je ne pense pas que cela aidera à changer quelque chose directement dans les parameters de composant de V2. Peut-être y a-t-il une chance de modifier le registre d’une manière ou d’une autre dans une action personnalisée avant de désinstaller V1 pour que le service d’installation pense que le fichier de configuration de V1 a été installé avec Permanent="yes" ?

Essayez l’atsortingbut NeverOverwrite pour le fichier de configuration

Si cet atsortingbut est défini sur «yes», le programme d’installation n’installe ou ne réinstalle pas le composant si un fichier de chemin d’access de clé ou une entrée de registre de chemin d’access de clé pour le composant existe déjà.

MODIFIER

Je viens de tester cela dans une configuration de test. Au début, cela ne fonctionnait pas car j’avais planifié l’action InstallInitialize avant la séquence InstallInitialize . Cela supprime l’ancien produit avant que le nouveau produit ne soit installé afin qu’il ne puisse pas être comparé.

Cependant, lorsque je l’ai défini après l’ InstallFinalize , cela a laissé le fichier même si la configuration d’origine n’avait pas défini NeverOverwrite . voici mes deux exemples de test

version 1.0.0.0

                      NEWERFOUND        

version 1.0.1.0

                       NEWERFOUND        

La façon dont je corrige ceci est très simple. Je n’installe pas les fichiers yourapp.config mais seulement yourapp.config.new Au premier lancement de l’application, avant de faire quoi que ce soit, vérifiez le fichier de configuration. S’il n’y en a pas, faites une copie de votreapp.config.new sur yourapp.config

C’est très simple, il n’utilise aucun atsortingbut spécial. Lorsque l’application est désinstallée, le fichier de configuration n’est pas désinstallé. Lorsque l’application est réinstallée, le fichier est perturbé. Notez que lorsque l’application est réparée, la configuration n’est pas non plus modifiée.