Проверьте наличие более поздних версий перед удалением - 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), они создаются по умолчанию из коробки. Идея состоит в том, чтобы покрыть наиболее распространенные требования и варианты использования, чтобы вы даже не знали, что у вас есть проблема с самого начала.