WIX (удалить все предыдущие версии)
В разделе "Установка и удаление программ" я вижу пять версий:
- ApplicationName v3.0.4.0
- ApplicationName v3.0.4.18
- ApplicationName v3.0.5.27
- ApplicationName v3.0.5.28
- ApplicationName v3.0.5.29
при попытке установить ApplicationName v3.0.5.30 все предыдущие версии НЕ удаляются. Версии, которые остаются:
- ApplicationName v3.0.4.0
- ApplicationName v3.0.4.18
Я уже прочитал все о том, как осуществить обновление установщика WiX?
Код, который я использую:
<Product Id="*"
UpgradeCode="$(var.UpgradeCode)"
Version="$(var.Version)"
Language="1033"
Name="$(var.ProductDisplayName) (v$(var.Version))"
Manufacturer="Unknown">
<Package InstallerVersion="380" Compressed="yes"/>
<Media Id="1" Cabinet="IileServer.cab" EmbedCab="yes" />
<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<Upgrade Id="$(var.UpgradeCode)">
<UpgradeVersion
Minimum="0.0.0.0" Maximum="99.0.0.0"
Property="PREVIOUSVERSIONSINSTALLED"
IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade>
<InstallExecuteSequence>
<RemoveExistingProducts Before="InstallInitialize" />
</InstallExecuteSequence>
Что я делаю не так?
Я также пытался собрать версию v3.0.6.0 и после установки я получил тот же результат.
Versions v3.0.5.X was removed
Versions v3.0.4.X was not uninstalled
UpgradeCode одинаков для всех версий, я посмотрел с изображением Orca
Последний код обновления на изображении для версии 3.0.6.0
1 ответ
Игнорирование цифр: Извлечение из документации MSI SDK для ProductVersion property
:
" Note that Windows Installer uses only the first three fields of the product version. If you include a fourth field in your product version, the installer ignores the fourth field...At least one of the three fields of ProductVersion must change for an upgrade using the Upgrade table.
"
Для того, чтобы избавиться от установок в дикой природе, есть несколько подходов.
Удаление по коду продукта: я бы просто получил список кодов продуктов и удалил бы их по всей корпорации, если вы поставляете собственное приложение: как я могу найти GUID продукта установленной установки MSI? Список кодов продуктов, которые вы собираете, можно затем передать msiexec.exe /x {productcode}
как объяснено в разделе 3 здесь. Просто простой командный файл. Или вы можете попробовать WMI, или один из других подходов.
Деинсталляция по коду обновления: вы можете проверить, используют ли все ваши версии установки один и тот же код обновления, используя следующий код: Как найти код обновления для установленного файла MSI? (они, вероятно, делают). Здесь есть даже версия VBScript. Добавляю ссылку на ответ, где я указываю на несколько других способов удаления, таких как удаление всех установок, которые используют один и тот же код обновления. И прямая ссылка на реальный код для этого (удаление по коду обновления).
Удаление по названию продукта: Вы также можете удалить по названию продукта. Некоторые примеры здесь (VBScript): есть ли альтернатива GUID при использовании msiexec для удаления приложения?, А вот функция удаления.NET DTF: Деинсталляция программы (значительно упрощенная, требует настройки для реального использования).
Некоторые ссылки:
- Wix MajorUpgrade не будет определять последнюю позицию версии продукта
- http://blog.deploymentengineering.com/2010/08/wix-users-exceeding-version-limits.html (здесь будет экзотический обходной путь)
- Powershell: удаление приложения с помощью Upgrade Code
- Проблемы Wix MajorUpgrade (концепция AllowSameVersionUpgrades WiX)