Я играл с Wix, создавая небольшое приложение с автоматически сгенерированным установщиком и тремя версиями для проверки возможности обновления: 1.0, 1.1 и 2.0.
1.1 предназначен для возможности обновления с 1.0 и не позволяет пользователю устанавливать 1.1, если 1.1 уже присутствует.
<Upgrade Id="MY_UPGRADECODE_GUID">
<UpgradeVersion Minimum="1.0.0"
IncludeMinimum="yes"
Maximum="1.0.0"
IncludeMaximum="yes"
Property="OLDERVERSIONBEINGUPGRADED" />
<UpgradeVersion Minimum="1.1.0"
IncludeMinimum="yes"
OnlyDetect="yes"
Property="NEWERVERSIONDETECTED" />
</Upgrade>
<Condition Message="A later version of [ProductName] is already installed. Setup will now exit.">
NOT (NEWERVERSIONDETECTED OR Installed)
</Condition>
Проблема №1: 1.1 не может быть деинсталлирован, потому что при деинсталляции ставится и проверяется условие.
2.0 предназначен для обновления с 1.1, а не для обновления с 1.0 («слишком старый»). Он также не должен устанавливаться поверх самого себя.
<Upgrade Id="MY_UPGRADECODE_GUID">
<UpgradeVersion Minimum="1.1.0"
IncludeMinimum="yes"
Maximum="1.1.0"
IncludeMaximum="yes"
Property="OLDERVERSIONBEINGUPGRADED" />
</Upgrade>
<Upgrade Id="MY_UPGRADECODE_GUID">
<UpgradeVersion Minimum="2.0.0"
OnlyDetect="yes"
Property="NEWERVERSIONDETECTED" />
</Upgrade>
<Upgrade Id="MY_UPGRADECODE_GUID">
<UpgradeVersion Minimum="1.0.0"
IncludeMinimum="yes"
Maximum="1.0.0"
IncludeMaximum="yes"
Property="TOOOLDVERSIONDETECTED" />
</Upgrade>
<Condition Message="A later version of [ProductName] is already installed. Setup will now exit.">
NOT NEWERVERSIONDETECTED OR Installed
</Condition>
<Condition Message="A version of [ProductName] that is already installed is too old to be upgraded. Setup will now exit.">
NOT TOOOLDVERSIONDETECTED
</Condition>
Проблема № 2: Если я попытаюсь обновиться с 1.1, я столкнусь с измененным условием более поздней версии. (Ошибка: уже установлена более поздняя версия основного приложения 1.1. Программа установки завершит работу.) Проблема №3: Программа установки позволяет установить 2.0 поверх самого себя.
Что я делаю неправильно с моим кодом обновления и условиями, чтобы получить эти проблемы в моих MSI?