L'élément Upgrade à l'intérieur de l'élément Product, combiné à une planification appropriée de l'action, effectuera la désinstallation que vous recherchez. Assurez-vous de répertorier les codes de mise à niveau de tous les produits que vous souhaitez supprimer.
<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<Upgrade Id="00000000-0000-0000-0000-000000000000">
<UpgradeVersion Minimum="1.0.0.0" Maximum="1.0.5.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade>
Notez que si vous faites attention à vos versions, vous pouvez empêcher les gens d'installer accidentellement une ancienne version de votre produit sur une plus récente. C'est à cela que sert le champ Maximum. Lorsque nous créons des programmes d'installation, nous définissons UpgradeVersion Maximum sur la version en cours de création, mais IncludeMaximum = "no" pour éviter ce scénario.
Vous avez le choix concernant la planification de RemoveExistingProducts. Je préfère le planifier après InstallFinalize (plutôt qu'après InstallInitialize comme d'autres l'ont recommandé):
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallFinalize"></RemoveExistingProducts>
</InstallExecuteSequence>
Cela laisse la version précédente du produit installée jusqu'à ce que les nouveaux fichiers et clés de registre soient copiés. Cela me permet de migrer les données de l'ancienne version vers la nouvelle (par exemple, vous avez changé le stockage des préférences utilisateur du registre vers un fichier XML, mais vous voulez être poli et migrer leurs paramètres). Cette migration est effectuée dans une action personnalisée différée juste avant InstallFinalize.
Un autre avantage est l'efficacité: s'il y a des fichiers inchangés, Windows Installer ne prend pas la peine de les recopier lorsque vous planifiez après InstallFinalize. Si vous planifiez après InstallInitialize, la version précédente est complètement supprimée en premier, puis la nouvelle version est installée. Il en résulte une suppression et une recopie inutiles des fichiers.
Pour d'autres options de planification, consultez la rubrique d'aide RemoveExistingProducts dans MSDN. Cette semaine, le lien est: http://msdn.microsoft.com/en-us/library/aa371197.aspx