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: Деинсталляция программы (значительно упрощенная, требует настройки для реального использования).


Некоторые ссылки:

Другие вопросы по тегам