Das Upgrade-Element im Product-Element führt in Kombination mit der richtigen Planung der Aktion die Deinstallation durch, nach der Sie suchen. Stellen Sie sicher, dass Sie die Upgrade-Codes aller Produkte auflisten, die Sie entfernen möchten.
<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>
Beachten Sie, dass Sie, wenn Sie mit Ihren Builds vorsichtig sind, verhindern können, dass Personen versehentlich eine ältere Version Ihres Produkts über eine neuere installieren. Dafür ist das Feld Maximum gedacht. Wenn wir Installationsprogramme erstellen, setzen wir UpgradeVersion Maximum auf die zu erstellende Version, aber IncludeMaximum = "no", um dieses Szenario zu verhindern.
Sie haben die Wahl zwischen der Planung von RemoveExistingProducts. Ich bevorzuge es nach InstallFinalize zu planen (anstatt nach InstallInitialize, wie andere empfohlen haben):
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallFinalize"></RemoveExistingProducts>
</InstallExecuteSequence>
Dadurch bleibt die vorherige Version des Produkts installiert, bis die neuen Dateien und Registrierungsschlüssel kopiert wurden. Auf diese Weise kann ich Daten von der alten auf die neue Version migrieren (Sie haben beispielsweise die Speicherung von Benutzereinstellungen aus der Registrierung in eine XML-Datei umgestellt, möchten jedoch höflich sein und deren Einstellungen migrieren). Diese Migration wird in einer verzögerten benutzerdefinierten Aktion unmittelbar vor InstallFinalize durchgeführt.
Ein weiterer Vorteil ist die Effizienz: Wenn Dateien unverändert vorhanden sind, kopiert Windows Installer sie nicht erneut, wenn Sie nach InstallFinalize planen. Wenn Sie nach InstallInitialize planen, wird zuerst die vorherige Version vollständig entfernt und dann die neue Version installiert. Dies führt zu unnötigem Löschen und erneuten Kopieren von Dateien.
Weitere Planungsoptionen finden Sie im Hilfethema RemoveExistingProducts in MSDN. Diese Woche lautet der Link: http://msdn.microsoft.com/en-us/library/aa371197.aspx