2013-03-17 6 views
1

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

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

ответ

2

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

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

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

+0

Благодарим за помощь. Есть ли способ передать переменные из Bootstrapper в MSI-Package? – BennoDual

+0

Да, см. Дочерний элемент 'MsiProperty' элемента' MsiPackage'. –

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