Елемент "Оновлення" всередині елемента "Продукт" у поєднанні з правильним плануванням дії виконає видалення, яке ви хочете. Обов’язково перелічіть коди оновлення всіх продуктів, які ви хочете видалити.
<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>
Зауважте, що якщо ви обережно ставитеся до своїх версій, ви можете завадити людям випадково встановити старішу версію вашого продукту на більш новій. Ось для чого поле "Максимальний". Коли ми створюємо інсталяторів, ми встановлюємо UpgradeVersion Maximum до версії, що будується, але IncludeMaximum = "ні", щоб запобігти цьому сценарію.
У вас є вибір щодо планування видалення RemoveExistingProducts. Я вважаю за краще планувати його після InstallFinalize (а не після InstallInitialize, як рекомендували інші):
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallFinalize"></RemoveExistingProducts>
</InstallExecuteSequence>
Це залишає попередню версію продукту, встановлену до тих пір, поки не будуть скопійовані нові файли та ключі реєстру. Це дозволяє мені переміщувати дані зі старої версії до нової (наприклад, ви переключили зберігання налаштувань користувачів з реєстру на XML-файл, але ви хочете бути ввічливими та перемістити їх налаштування). Ця міграція проводиться у відкладеній спеціальній дії безпосередньо перед InstallFinalize.
Ще одна перевага - ефективність: якщо є незмінні файли, інсталятор Windows не заважає копіювати їх повторно під час планування після InstallFinalize. Якщо ви плануєте після InstallInitialize, попередня версія спочатку повністю видаляється, а потім встановлюється нова версія. Це призводить до непотрібного видалення та повторної копіювання файлів.
Інші параметри планування див. У довідковій статті RemoveExistingProducts в MSDN. На цьому тижні посилання є: http://msdn.microsoft.com/en-us/library/aa371197.aspx