Установщик WiX - Обновление сценария Custom UI - PullRequest
3 голосов
/ 06 апреля 2010

Для моего приложения у меня есть .msi, разработанный с WiX. Для сценария обновления я хочу сделать следующее:

  • , если установленная версия никогда не обновляется, тогда версия обновления отображает ошибку

  • если установленная версия старше версии обновления, отобразите кнопку с текстом Update

  • если установленная версия совпадает с версией обновления, отобразить кнопку с текстом Repair

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

1 Ответ

1 голос
/ 10 апреля 2010

Используйте свойство Upgrade.

Предполагая

<Product Version="1.0.0.0" />

и

<Upgrade Id="GUID">
  <UpgradeVersion OnlyDetect="no" Property="OLDERFOUND" Maximum="1.0.0.0" IncludeMaximum="no" />
  <UpgradeVersion OnlyDetect='yes' Property='NEWERFOUND' Minimum="1.0.0.0" IncludeMinimum='no' />
  <UpgradeVersion OnlyDetect='yes' Property='SAMEFOUND' Minimum="1.0.0.0" Maximum='1.0.0.0' />
</Upgrade>

Первая версия обновления находит все версии до текущей

вторая строка находит все версии выше текущей

третья строка находит установленные версии, совпадающие с текущей

Затем используйте настраиваемое действие, например

<CustomAction Id='NewerFound' Error='A later version of [ProductName] is already installed' />
<InstallExecuteSequence>
    <Custom Action='NewerFound' After='FindRelatedProducts'>NEWERFOUND</Custom>
    <RemoveExistingProducts After="InstallInitialize" />
</InstallExecuteSequence>

и т.д.

Показанные настраиваемые действия либо удаляют старую версию автоматически, либо предупреждают пользователя о том, что более новая версия уже установлена, но если вы хотите запросить у пользователя информацию, вместо отображения ЦС вы можете показать свой пользовательский интерфейс.

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

...