WiX Bootstrapper - установите MSI из CustomAction

Я создал загрузчик с WiX. Он содержит цепочку с двумя MSI-пакетами. Когда он запущен, он вызывает .NET-CustomAction, который показывает представление (как в этом примере: http://bryanpjohnston.com/2012/09/28/custom-wix-managed-bootstrapper-application), где Пользователь может выбрать некоторые настройки.

Теперь мне нужно установить только первый msi, когда пользователь выбирает специальный параметр в этом представлении. Сейчас я ищу способ сделать это. Самый простой способ - запустить установку MSI из своего .NET-класса (ViewModel). Но как мне получить доступ к MSI-пакету, который включен в MSI-Bootstrapper, и запустить его?


person BennoDual    schedule 17.03.2013    source источник


Ответы (1)


Когда Burn планирует ваши пакеты MSI, он будет выполнять обратный вызов с «запрошенным состоянием» для каждого пакета, который вы можете переопределить. Чтобы увидеть это прикрепите к событию PlanPackageBegin. Это событие предоставляется PlanPackageBeginEventArgs. В этих аргументах событий вы увидите поле State, которое сообщит вам, что Burn будет делать для этого пакета по умолчанию. Вы можете установить это поле State на любое RequestState, которое хотите.

Например, если пакет отсутствует, а вы Plan() LaunchAction.Install, то State будет RequestState.Present. Ваш собственный код BA может изменить это на все, что RequestState вы хотите. Таким образом, ваш пользовательский интерфейс мог бы сказать: «Я знаю, что вы думаете, что вам следует установить этот пакет, но этот пользователь снял флажок, в котором говорится, установите FooWidget, поэтому сделайте этот пакет RequestState.Absent».

Файл журнала покажет вам результат выполнения плана и может быть очень полезен при отладке.

person Rob Mensching    schedule 17.03.2013
comment
Спасибо за помощь. Есть ли способ передать переменные из загрузчика в пакет MSI? - person BennoDual; 18.03.2013
comment
Да, см. MsiProperty дочерний элемент MsiPackage элемента. - person Rob Mensching; 19.03.2013