J’ai écrit un programme d’installation avec Wix et cela a bien fonctionné pour installer mon programme. Maintenant, j’ai besoin de le mettre à jour, donc je suis tombé sur le numéro de version mais quand je vais installer le nouveau programme sur l’ancien, il se plaint qu’une ancienne version est déjà installée et me dit de le désinstaller en premier.
Comment puis-je le mettre à jour ou le désinstaller automatiquement avant de le réinstaller?
Je pense qu’aucune des réponses fournies n’est complète ou autonome, donc après avoir parcouru ce marais, voici les étapes qui, à mon avis, sont nécessaires pour que la mise à jour fonctionne parfaitement:
Assurez-vous que votre identifiant de produit change à chaque fois que vous créez. Si vous ne le faites pas, vous obtenez toujours le message “déjà installé” mentionné par l’OP.
Modifier la version du produit chaque fois que le produit lui-même change. Je suppose que la meilleure option est de le lier à une version d’assemblage (qui doit également être auto-incrémentée), mais bien sûr, vous pouvez aussi la modifier manuellement. Cette étape n’est pas ssortingctement requirejse si vous utilisez l’atsortingbut AllowSameVersionUpgrades au point 4, mais j’oserais dire que conserver la constante de la version de votre produit est une mauvaise pratique dans tous les cas.
Gardez votre constante UpgradeCode (par exemple):
Ajoutez l’élément MajorUpgrade (à partir de Wix 3.5.1315.0). Pour suivre le rattrapage que MajorUpgrade ignore les modifications du numéro de révision de la version du produit, ajoutez l’atsortingbut AllowSameVersionUpgrades (ou si vous préférez AllowDowngrades). De cette façon, vous pourrez passer de la version 1.0.0.7
à la version 1.0.0.8
. et pas seulement de 1.0.7.0
à 1.0.8.0
. Si vous ne le faites pas, vous pouvez voir plusieurs installations dans Programmes et fonctionnalités.
Voici l’intégralité de mon fichier .wix (les parties pertinentes, les deux fragments qui mènent à l’assemblage utilisé pour la liaison du produit sont pour la plupart facultatifs et, à titre d’illustration, tout moyen de mettre en attente l’assemblage fonctionnera):
J’ai vérifié tous les messages mentionnés ci-dessus et j’ai passé beaucoup de temps à essayer de faire en sorte que cela fonctionne.
L’aide sur le HOWTO officiel pour les mises à niveau à l’étape 3 a beaucoup aidé: vous avez besoin d’un nouvel Product/@Id
pour désactiver le message “Une autre version de ce produit est déjà installée”.
J’ai utilisé cette section de mise à niveau (enfant du produit):
Notez que OnlyDetect
est défini sur “non”. Cela déclenche la suppression de l’ancienne version, si vous avez la section suivante (enfant du produit):
Notez également que apparemment, seuls les trois premiers composants du numéro de version sont utilisés pour vérifier les mises à niveau …
vous devez utiliser la table de mise à niveau:
< Upgrade Id='15E2DAFB-35C5-4043-974B-0E342C25D76A'> < UpgradeVersion Property='OLDVERSIONFOUND' IncludeMinimum='no' Minimum='0.0.0.0' /> < /Upgrade>
vous devez également append une action:
< InstallExecuteSequence> < LaunchConditions After='AppSearch' /> < RemoveExistingProducts After='InstallValidate' /> < /InstallExecuteSequence>
voici un tutoriel
J’ai essayé ceci et cela a fonctionné pour moi.
Product Id = “*” Name = “Quelque chose” Language = “1033” Version = “1.0.0.0” Manufacturer = “Quelqu’un” UpgradeCode = “43ab28d7-6681-4a05-a6b5-f980733aeeed”
L’identifiant de produit doit être défini sur * pour que chaque fois que vous construisez votre projet, il prenne un identifiant différent.
MajorUpgrade AllowDowngrades = “no” DowngradeErrorMessage = “Une version plus récente de [ProductName] est déjà installée.” AllowSameVersionUpgrades = “yes” /
Ainsi, chaque fois que vous mettez à jour votre version (ou que votre version est la même, pas moins que la version actuelle), vous réinstallez votre produit en supprimant les fichiers précédents et en installant les fichiers du produit. Il ne rétrogradera pas votre produit.
Il suffit de mettre cet élément sous l’élément Product
:
Plus d’infos dans ce HowTo