Вопрос: Установка Wix - использование Burn для управления управляемым пользовательским интерфейсом и отображение одного и того же файла прогресса в виде встроенных диалогов


Я использую Wix Burn для установки реквизитов нашего проекта, я использовал ManagedBootstrapperApplicationHost  чтобы иметь пользовательский интерфейс, я следил за проектом, доступным из исходного кода Wix, для создания моего управляемого приложения WPF.

Теперь проблема заключается в том, что Progress (Message) показывает, что не соответствует сообщению о ходе выполнения, которое мы используем встроенный интерфейс - WixStandardBootstrapperApplication.RtfLicense  

В основном я использую следующий код из источника Wix

 private void ExecuteMsiMessage(object sender, ExecuteMsiMessageEventArgs e)
        {
            lock (this)
            {
                this.Message = e.Message;
                e.Result = this.root.Canceled ? Result.Cancel : Result.Ok;
            }
        }

Как я могу иметь тот же дисплей, что и в обычном диалоге Progress. У меня есть индивидуальное задание Message из других методов, таких как PlanPackage и т. Д.


5


источник


Ответы:


Сегодня wixstdba не показывает сообщения о ходе действий. Кто-то говорил о добавлении функции в список рассылки wix-devs, но этого еще не произошло. Это просто вопрос добавления кода, как у вас в управляемом случае, к wixstdba (у него его еще нет).

Если вы просто хотите отобразить имя устанавливаемого пакета, как это делает wixstdba, тогда вы захотите обработать Engine.OnCachePackageBegin() а также Engine.ExecutePackageBegin() Обратные вызовы. Эти обратные вызовы сообщают вам, когда пакет начинает загружаться, а затем устанавливается соответственно. Как часть аргументов для этих обратных вызовов вам будет предоставлен идентификатор пакета.

Чтобы получить дружеское отображаемое имя, вы можете прочитать BootstrapperApplicationData.xml который автоматически включается рядом с вашим загрузочным приложением .dll. В WixPackageProperties элементы, которые предоставляют много информации о пакетах в комплекте, включая DisplayName,

--- Извините, следующий ответ на вопрос, который не был задан. ---

Engine.ExecuteMsiMessage() callback вызывается, когда установщик Windows выводит сообщение (например, данные действия или запрос, запрашивающий пользователя для ввода). Прогресс обеспечивается тремя различными обратными вызовами.

  1. Вы можете получить общий прогресс через Engine.Progress Перезвони. Это очень крупный прогресс, который по существу движется по мере того, как каждый пакет кэшируется и выполняется.

  2. Вы можете получить общий и индивидуальный ход пакета через Engine.CacheAcquireProgress, Этот прогресс перемещается по мере того, как каждый пакет загружается / копируется и проверяется для размещения в кэше пакетов.

  3. Вы можете получить общий и индивидуальный ход пакета через Engine.ExecuteProgress Перезвони. Этот прогресс движется по мере того, как каждый пакет устанавливается / исправляется / удаляется.

Итак Engine.Progress показывает общий общий прогресс и очень прост в использовании для одного индикатора выполнения, но индикатор выполнения не будет двигаться очень плавно. Вы можете получить более плавный общий прогресс, добавив Engine.CacheAcquireProgress к Engine.ExecuteProgress, Примечание. Это даст вам индикатор выполнения, который будет равен 200.

Вы можете видеть, как WixBA обрабатывает все это в src\Setup\WixBA\ProgressViewModel.cs файл.


6