У меня есть система сборки CI, создающая MSI всякий раз, когда разработчик проверяет изменения. Мы запускаем автоматические приемочные тесты на установленной MSI.
В принципе, каждая MSI - это полная установка продукта, поэтому у нас нет какого-либо управления версиями (ala Windows installer) как таковой.
Каждый MSI имеет тот же GUID продукта и GUID обновления, и тот же номер версии. но имеет другой GUID пакета (используйте '*' в wix).
Что я хочу достичь, так это то, что при запуске установщика он "удалит" любую ранее установленную версию продукта и установит новую. Все из одной MSI (у нас есть запутанный процесс установки, который отсутствует нашего контроля.. citrix и sccm, поэтому мы хотим дать им простой путь установки)
Я пробовал:
<Property Id='PREVIOUSVERSIONSINSTALLED' Secure='yes' />
<Upgrade Id='$UPGRADE_GUID'>
<UpgradeVersion Minimum='1.0.0.0'
Maximum='99.0.0.0'
Property='PREVIOUSVERSIONSINSTALLED'
IncludeMinimum='yes'
IncludeMaximum='no' />
</Upgrade>
и имеют:
<InstallExecuteSequence>
<RemoveExistingProducts After='InstallFinalize' />
</InstallExecuteSequence>
и попробовали:
<InstallExecuteSequence>
<RemoveExistingProducts After='InstallInitialize' />
</InstallExecuteSequence>
Но когда я пытаюсь установить msi из последующей сборки, я получаю:
Another version of this product is already installed. Installation of this version cannot continue.
To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel.
На самом деле я этого не делал.
Я понимаю, что я могу просто обновить атрибут Version в теге продукта, но с этим сложно справиться. Во-первых, я могу создать 20+ msi-сборки в день, так как у меня есть несколько конвейеров сборки, которые производят MSI, и я не уверен, как обрабатывать нумерацию версий таким образом, чтобы это имело смысл.
Может быть, установщик Windows просто не позволяет установить этот тип "всегда перезаписывать установленную версию"?