Как запретить Wix устанавливать более старую версию? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть приложение, которое мы переключаем на установщик WiX. Пока что, кажется, все идет хорошо. Единственная проблема, с которой я столкнулся, заключается в том, что, если загрузить и попытаться установить более старую версию, она делает это.

И это небольшая проблема. Если установлена ​​более новая версия, я не хочу устанавливать более старую версию. Я думал, что проблема была с компонентом «Обновление», но я должен признать, что столкнулся со стеной. Как я могу изменить его, чтобы более старые версии видели, что уже установлена ​​более новая версия, а не устанавливали ее?

Мой тестовый продукт теперь в версии 2.4 (самая новая версия, которую мы пытаемся выпустить). Он корректно обновляется до 2.4.1 или 2.5 или 3.0. Но если я делаю версию 3.0, а затем запускаю msi для 2.4, он все равно добавляет ее.

Мой компонент обновления:

<Upgrade Id="PUT-GUID-HERE">
  <UpgradeVersion Maximum="2.4" Property="PREVIOUSVERSIONSINSTALLED" />
  <UpgradeVersion Minimum="1.0" Property="NEWERPRODUCTFOUND" OnlyDetect="yes" IncludeMinimum="no" />
</Upgrade>

Follow Up:
Следуя предложению Steins, я получил такую ​​ошибку
«Дублированный символ» WixAction: InstallExecuteSequence / RemoveExistingProducts 'найден »
После просмотра файла Product.wxs в папке <InstallExecuteSequence> мне пришлось удалить <RemoveExistingProducts Sequence="6550" />, потому что это был дубликат, на который он ссылался. После этого установщик сработал, и старые версии больше не могут быть установлены поверх новых версий.

1 Ответ

0 голосов
/ 28 июня 2018

Пакеты прошлых фьючерсов : Вы не можете изменить старые версии своего пакета, чтобы обнаружить более новые. Вы должны встроить защиту в ваши пакеты с самого начала. Packages need to be pre-cognitive. It's an industry problem.

Modern Times : элементы WiX, которые вы показываете выше, «в старом стиле». Здесь описана новая «удобная функция»: Как вы обнаруживаете установленные версии продукта при каждом запуске? Она включает в себя «новый» MajorUpgrade элемент . Этот новый MajorUpgrade элемент обладает некоторой автоматической магией, и я считаю, что он добавляет защиту, которую вы описываете по умолчанию (защита от понижения). Следовательно, вы можете переключиться на его использование. Я бы попробовал это первым. Позвольте мне указать основные разметки:

<MajorUpgrade Schedule="afterInstallInitialize" 
              DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit." 
              AllowDowngrades="no" AllowSameVersionUpgrades="no" />

Помимо удаления элементов обновления старого стиля, не забывайте также удалять любое жестко запрограммированное планирование стандартного действия RemoveExistingProducts. Например, удалите эту строку (порядковый номер, скорее всего, будет другим, но с тем же именем):

<RemoveExistingProducts Sequence="6550" />

Отключение : Если вы обнаружите, что существует высокий риск того, что люди будут запускать старые версии и связываться с вашим новейшим приложением, вы можете указать новое место установки и новый обновите код до последней версии и установите параллельно, чтобы отделить старые и новые продукты.

Side-by-Side : чтобы это работало, ваш продукт должен быть в состоянии мирно сосуществовать и не бороться за файловые ассоциации, COM для каждой машины зарегистрирован серверы или другие глобальные данные, которые мешают продуктам друг с другом. Возможно ли это или нет, зависит от вашего приложения. Глобальный общий COM-сервер не может быть зарегистрирован из двух разных мест - если вы используете обычную регистрацию в реестре (хотя вы можете использовать основанный на манифестах безрегулярный COM - хотя это иногда бывает) Может быть много проблем, которые нужно преодолеть, прежде чем ваше приложение будет поддерживать параллельную установку, или это может быть довольно тривиально, если ваш пакет прост без участия реестра.

GUID компонентов : необходимо также установить новые GUID компонентов - для всех компонентов - в дополнение к упомянутому изменению кода обновления, чтобы реально защитить продукты от каждого Другой. Если вы используете WiX auto-GUIDs , это произойдет автоматически. Причина, по которой вам нужны новые GUID компонентов, описана здесь: Изменить мой GUID компонента в wix? По существу, ссылка GUID учитывает абсолютное местоположение установки, а не файл как таковой. Вы устанавливаете в новое место, вам нужен новый GUID компонента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...