Запускайте пользовательское действие Wix только во время удаления, а не во время основного обновления - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь удалить файл с помощью пользовательского действия, запланированного между InstallInitialise и InstallFinalize стандартным действием.

MajorUpgrade element используется для разработки обновлений.

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

Я использовал следующие условия для выполнения действия CUstom:

  1. (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")
  2. REMOVE AND NOT WIX_UPGRADE_DETECTED

Есть ли способ однозначно определить Major Upgrade, используя свойства в Wix?

Ответы [ 2 ]

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

Фил уже ответил. Я просто выложу то, что написал несколько часов назад прежде чем отправиться Условия, которые вы укажете, выглядят довольно хорошо для меня. Может быть, я сделаю краткий обзор вещей, которые могут вызвать путаница - например, какие настраиваемые действия выполняются, когда?


Основные обновления : Серьезное обновление - это, по сути, установка новой версии приложения в сочетании с удалением старой версии - возможно другое планирование удаления (удаление старой и установка новой , или установите новый и удалите старый). Следовательно, во время основной операции обновления 1) последовательность удаления выполняется только для старой установки , а 2) запускается новая установка только его последовательность установки . Это крайне важно для понимания того, какие настраиваемые действия выполняются, когда и почему.

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

Никакого дооснащения для основных обновлений : Как объясняет Фил, вы не можете добавить пользовательское действие, которое будет выполняться во время последовательности удаления старой установки, внутри новой установки. Это пользовательское действие должно было быть частью первоначальной настройки или добавлено путем незначительного обновления (которое обновляет существующую установку на месте, а не удаляет и переустанавливает ее).

Важно

  • UPGRADINGPRODUCTCODE устанавливается только в настройках, которые удаляются в рамках крупного обновления. не установлено в новой устанавливаемой версии.
    • Условие UPGRADINGPRODUCTCODE, следовательно, не соответствует действительности в установке установки, только в установке удаления .
  • WIX_UPGRADE_DETECTED устанавливается только в настройках, использующих элемент MajorUpgrade WiX, которые обнаружили, что другая версия удаляется в процессе установки.
    • Условие WIX_UPGRADE_DETECTED, следовательно, true в установке установки, но не в установке удаления .

WIX_UPGRADE_DETECTED : Если говорить более подробно, WIX_UPGRADE_DETECTED, строго говоря, не пользовательская функция WiX - это стандарт WiX или соглашение для установка встроенного свойства MSI ActionProperty для процесса обновления. Все файлы MSI, поддерживающие крупные обновления, имеют такое свойство, WiX просто называет его стандартным образом. Это свойство задается в столбце в таблице Upgrade , и это свойство устанавливается, когда установка находит связанные продукты - более ранние версии (и, следовательно, подлежащие удалению) - в том же окне во время установка.

WIX_DOWNGRADE_DETECTED : обратите внимание, что в стандартном MSI, скомпилированном с WiX и использующим элемент MajorUpgrade, также есть WIX_DOWNGRADE_DETECTED - свойство, используемое для вывода списка найденных продуктов более высокой версии, чем текущая настройка. Это блокирует установку, о которой идет речь, в большинстве случаев (если параметры не настроены дизайнером установки).

Свойством действия, указанным в таблице обновлений, может быть «что угодно», но «удобная функция» MajorUpgrade делает это для вас «автоматическим» способом, который имеет смысл для большинства целей - используя упомянутые имена свойств WIX_UPGRADE_DETECTED и WIX_DOWNGRADE_DETECTED. Проверьте Upgrade Table вашего скомпилированного MSI, чтобы увидеть, как это работает в деталях. Вот снимок экрана:

Upgrade Table of compiled WiX MSI


Я написал этот другой ответ, показывающий, как использовать другое имя свойства (YOURUPGRADEPROPERTY) в качестве "ActionProperty": диалог обновления и процесса установки установщика wix (связанный ответ не является рекомендацией, демонстрация только). Просто ссылка, вероятно, не очень полезная для вас сейчас, когда я об этом думаю.

Некоторые ссылки :

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

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

Я также предполагаю, что вы смотрели на элемент RemoveFile, и он не соответствует вашим требованиям.

Свойство UPGRADINGPRODUCTCODE применяется к более старому продукту, который обновляется и удаляется. Если файл принадлежит этому установленному продукту и вы хотите удалить его только при деинсталляции с настраиваемым действием в этой более старой установке, условие для настраиваемого действия будет:

REMOVE = "ALL", а не UPGRADINGPRODUCTCODE

но, как я уже сказал, это настраиваемое действие должно быть уже в более старом установленном продукте, и вы ничего не можете сделать в своем обновлении MSI, чтобы это исправить.

Если вы удаляете файл из обновления, тогда условие во время обновления будет только:

WIX_UPGRADE_DETECTED

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

...