2015-05-27 2 views
0

В одной версии установщика нашего продукта я добавил пользовательский диалог (показан ЦС с использованием session.Message()), который спрашивает пользователя, хочет ли он сохранить некоторые свои данные при удалении.WIX подавляет диалог удаления при выполнении основного обновления?

В CA установлено условие REMOVE="ALL" AND NOT WIX_UPGRADE_DETECTED. Диалог отображается правильно при нормальной деинсталляции, но также появляется при удалении существующего продукта при крупном обновлении. В этот момент установщик зависает, и его можно закрыть только из диспетчера задач, что приведет к некорректному обновлению.

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

ответ

1

Вам необходимо исправить кэшированную MSI исходной версии. Не должно быть никакого пользовательского интерфейса во время транзакции с тихой установкой. Вам нужно будет сделать копию оригинальной встроенной MSI, изменить ее, чтобы не выполнять это настраиваемое действие, а затем повторно использовать ее с помощью msiexec/I foo.msi REINSTALL = ALL REINSTALLMODE = vomus, прежде чем вы сможете сделать свой основной урон. Или попросите своих пользователей сначала выполнить удаление. Именно по этой причине вы должны проверить свою стратегию обслуживания, прежде чем перейти к производству. MSI похож на самолет ... нет кнопки остановки или возврата. Вы всегда двигаетесь вперед, и вы должны планировать соответственно.

+0

Я создал CA в более новой версии (основное обновление), которая вызывает msiexec, как вы описали (с использованием исправленных msi). Действие выполняется после FindRelatedProducts, но по какой-то причине кэшированные msi не заменяются, и обновление падает. Но когда я попытался вызвать msiexec из приложения Console, кешированный msi был заменен правильно. У вас есть идея, почему это происходит? –

+0

MSI имеет мьютекс, который предотвращает одновременную установку. Один msi не может установить еще один MSI (который эффективно использует recache). Перед запуском новой MSI вам нужно запустить команду. –

+0

Я предполагаю, что мне нужно как-то запустить команду msiexec из пакета, прежде чем устанавливать основное обновление. Или, вы имеете в виду, что мне нужно создать отдельное приложение, которое запускает команду? –

2

Свойство UPGRADINGPRODUCTCODE установлено в старом продукте, поскольку оно удаляется. WIX_UPGRADE_DETECTED устанавливается во входящей новой настройке обновления при обнаружении.

Условие REMOVE = "ALL" AND NOT UPGRADINGPRODUCTCODE похоже на то, что вы хотите, показывая диалог во время установки, но не тогда, когда удаление происходит из-за серьезного обновления.

+0

Спасибо за предложение. Я знаю, что теперь, и я установил флаги соответственно, в новой версии. Проблема была в предыдущей версии, которая уже была отправлена ​​с неправильными флагами. –

+0

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

Смежные вопросы