Я поигрался с 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?