Передача свойства при обновлении до MSI, который удаляется - PullRequest
0 голосов
/ 03 сентября 2018

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

<InstallExecuteSequence>
  <Custom Action="InitSetup" Before="CostFinalize">UILevel=2</Custom>
</InstallExecuteSequence>

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

msiexec / i my.msi PROP_PASSWORD = 12345

Свойство ПАРОЛЬ в помечено как Скрытое и Безопасное:

<Property Id="PROP_PASSWORD" Hidden="yes" Secure="yes" />

Во время обновления, при удалении более старой версии, InitSetup снова запускается, но PROP_PASSWORD не передается ему, поэтому действие завершается сбоем и в результате общий сбой обновления.

Есть ли способ принудительно перенаправить PROP_PASSWORD на MSI, который удаляется?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Просто чтобы закрыть тему о том, как я решил это в конечном итоге - или, точнее, нашел обходной путь: так как у настраиваемого действия было условие UILevel = 2 вместо инициации тихой установки с / q, вместо этого я дал указание обновить с / qb-. Это установит для UILevel значение 3. С точки зрения пользовательского опыта они будут видеть только форму уведомления и индикатор выполнения. Он не будет отображать блокирующие диалоги.

0 голосов
/ 03 сентября 2018

Подготовка : действительно ли необходимо проверять лицензионный ключ при удалении? Не могли бы вы сделать так, чтобы пользовательское действие не запускалось при удалении? Его можно настроить так, чтобы он не запускался при деинсталляции, инициированной основным обновлением, в отличие от обычных деинсталляций, запускаемых вручную. Он включает в себя свойство UPGRADINGPRODUCTCODE. Добавив NOT UPGRADINGPRODUCTCODE к вашему условию, пользовательское действие никогда не будет выполняться во время значительных обновлений. Что-то вроде: UILevel=2 AND NOT UPGRADINGPRODUCTCODE. Условие NOT REMOVE="ALL" также не позволит запускаться при обычной деинсталляции. Условия тяжелые - есть много режимов установки для тестирования.

Сохранять свойства : Вы также можете сохранить пароль в реестре и создать свою настройку для ее считывания, если она там есть. Это включает в себя поиск в реестре, что легко может сделать WiX.

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

Инициализация, инициированная Setup.exe : Если вы используете программу запуска setup.exe, созданную с помощью Burn, одним из вариантов будет запуск удаления старой версии с помощью программы запуска, а не изнутри самого MSI (который имеет серьезные технические ограничения из-за необходимости только одного активного сеанса установки MSI в любое время). Это позволит вам передать любую командную строку в процедуру удаления.

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

...