Проверьте наличие более поздних версий перед удалением - WIX

Если установлено несколько версий одного и того же продукта, можно ли использовать свойство для проверки наличия более новой версии, добавления сообщения об условиях и предотвращения удаления?

  • WebSite 1.0.0 - Базовые файлы (MajorUpgrade)
  • WebSite 1.0.1 - Незначительные обновления файлов
  • WebSite 1.1.0 - Базовые файлы (MajorUpgrade)

Вариант использования: WebSite 1.0.0 и WebSite 1.0.1 установлены на веб-сервере с использованием пакета MSI. Когда WebSite 1.0.0 удаляется, я должен быть в состоянии предотвратить это, если существует более новая версия.

Я подумал об использовании условий, но не уверен, что это лучший путь.

<Condition Message="Newer version of the product must be removed">
    Installed OR PRODUCTVERSION > 1.0.0
</Condition>

Когда WebSite 1.1.0 установлен, он удалит предыдущую версию, потому что у него есть базовый набор необходимых файлов.

2 ответа

Решение

Если вам нужно предотвратить ручное удаление версии 1.0.0, вам нужен поиск (скажем) идентификатора компонента, который существует только в более поздних версиях, и вам необходимо знать, какие они есть в более старых версиях, чтобы более старые версии могут предсказывать будущее. Или вам нужны более поздние версии для создания записей реестра, которые 1.0.0 могут знать заранее, и поиска во время удаления. Поиск основного обновления ничего не найдет, потому что поиск крупного обновления FindrelatedProducts не выполняется во время удаления. Вам нужен поиск, компонент, реестр или что-то, что, как знает 1.0.0, будет в более поздней версии. Затем используйте это свойство в состоянии запуска, чтобы предотвратить удаление.

Другой возможностью может быть пользовательское действие, которое вызывает MsiEnumrelatedProducts() или эквивалент в коде обновления. Это вернет серию ProductCodes, для которых вы можете вызвать MsiGetProductInfo(), чтобы получить версию продукта, а затем проверить, какие значения актуальны. Преимущество этого заключается в том, что более раннему продукту не нужно заранее знать записи реестра или идентификаторы компонентов, поскольку коды обновления более предсказуемы и вряд ли изменятся в ряде продуктов.

Элемент MajorUpgrade обрабатывает все это с 1 атрибутом.

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

Если вы используете шаблоны проектов IsWiX (CodePlex), они создаются по умолчанию из коробки. Идея состоит в том, чтобы покрыть наиболее распространенные требования и варианты использования, чтобы вы даже не знали, что у вас есть проблема с самого начала.

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