Элемент Upgrade внутри элемента Product в сочетании с правильным планированием действия выполнит удаление, которое вы после. Не забудьте перечислить коды обновления всех продуктов, которые вы хотите удалить.
<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>
Обратите внимание, что, если вы будете осторожны с вашими сборками, вы можете предотвратить случайную установку более старой версии вашего продукта поверх более новой. Вот для чего используется поле Maximum. Когда мы собираем установщики, мы устанавливаем UpgradeVersion Maximum для создаваемой версии, но IncludeMaximum = "no", чтобы предотвратить этот сценарий.
У вас есть выбор относительно планирования 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