WiX "Major Upgrade" не полностью устанавливает приложение при понижении - PullRequest
8 голосов
/ 09 октября 2009

В настоящее время все обновления работают нормально при обновлении до более нового номера версии, однако я получаю странное поведение при понижении версии. Кажется, что он удалит существующую версию, а затем частично установит версию, которую я пытаюсь установить, основной исполняемый файл еще не существует в целевом местоположении, но объявленные ярлыки созданы. Когда объявленный ярлык открывается, он завершает установку (предположительно выполняет ремонт) и затем работает нормально.

У кого-нибудь есть идеи, почему это происходит?

Мой блок обновления выглядит так:

<UpgradeVersion Minimum="0.0.0.0" Maximum="99.0.0.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" IgnoreRemoveFailure="yes" />

(IgnoreRemoveFailure была попыткой исправить эту проблему, но, похоже, она ничего не сделала)

В моей InstallExecuteSequence у меня есть <RemoveExistingProducts After="InstallValidate" />

Также у меня есть Product Id="*" и Package Id="*"

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

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

Ответы [ 5 ]

3 голосов
/ 24 марта 2014

Вот что у меня сработало:

<Wix ...>
  <Product ...>
    <Property Id="REINSTALLMODE" Value="amus" />
    <MajorUpgrade AllowDowngrades="yes" />
2 голосов
/ 12 октября 2009

Разрешение понижений не считается лучшей практикой, по крайней мере отчасти, потому что очень сложно протестировать каждую комбинацию, которую вы поддерживаете, в то время как все еще возможно их исправить. Разве невозможно вместо этого обнаружить и заблокировать этот случай (сначала предложите удалить более новую версию) и только автоматически поддерживать движение вперед?

Если вам нужно, чтобы это работало, есть ли что-нибудь в подробном журнале для установки с пониженной версией (или для ремонта - вам нужно установить политику журналирования машины, чтобы создать эту), которая подтверждает основное обновление ( Я посмотрю рядом с FindRelatedProducts) или обсуждает, почему компонент для вашего exe не установлен? Обязательно проверьте все строки журнала с SELMGR, поскольку они могут объяснить это в сценарии незначительного обновления.

Поскольку объявленный ярлык на месте, кажется, что компонент был объявлен вместо этого. Это может указывать на нарушения правил компонентов при незначительном обновлении (в частности, добавление компонента в более новой версии, похожее на удаление в более старой версии - см. комментарий HeathS ), хотя кажется, что Product/@Id='*' должен вызвать крупное обновление.

Вы также можете попробовать поработать в примере проекта, начиная с базовой версии, в которой есть одна функция, один компонент и один файл с ярлыком. При необходимости добавьте еще один компонент и файл в обновленную версию; в противном случае просто увеличивайте версии файла. Затем попробуйте обратный сценарий. Медленно добавляйте вещи, пока не найдете своего виновника. Тогда надейтесь, что это то, что вы можете удалить из своего реального продукта, или иначе можно обойти.

1 голос
/ 19 октября 2009

Как вы упорядочили операции в вашей InstallExecuteSequence?

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

Установщик Windows не будет перезаписывать более старые версии новыми, если это явно не задано.

Изменение порядка удаления перед установкой должно помочь в этом случае.

1 голос
/ 12 октября 2009

Мое предложение немного относится к принципу "заставь его работать" - в случае понижения версии можно попробовать выполнить пользовательское действие по восстановлению без вывода сообщений.

0 голосов
/ 16 октября 2009

Что произойдет, если вы используете два элемента "UpgradeVersion"?

<UpgradeVersion Maximum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMaximum="no" />
<UpgradeVersion Minimum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="no" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...