Элемент 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>
Обратите внимание: если вы будете осторожны со своими сборками, вы можете предотвратить случайную установку старой версии вашего продукта поверх новой. Для этого и предназначено поле «Максимум». Когда мы создаем установщики, мы устанавливаем 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
person
Brian Gillespie
schedule
18.10.2008