загрузчик wix

Я написал управляемый загрузчик wix с использованием WPF. Фактические шаги установки требуют объединения нескольких файлов msi / exe и командных файлов.

<Chain>
 <MsiPackage SourceFile="xxx"/>
 <ExePackage Id="Test" SourceFile="..\TestBatch.bat" Vital="yes"/>
 <MsiPackage SourceFile="yyy"/>
</Chain>

Во время выполнения каждого пакета должно отображаться сообщение (желательно из пользовательского интерфейса загрузчика), указывающее, какой пакет / пакетный файл msi / exe выполняется в данный момент. Короче говоря, в загрузчике необходим ProgressText. Как я могу это сделать?

Другой вопрос: я не хочу, чтобы все msi были упакованы в bootstrapper exe. Это потому, что: Каждый раз, когда изменяется msi, мы хотели бы отправлять только обновленный / измененный msi, а не весь исполняемый файл начальной загрузки. Есть ли способ сделать это?


person microsoftprogrammer    schedule 19.02.2013    source источник


Ответы (1)


Два ответа, одно предложение:

  1. Чтобы получать сообщения обратно во время установки MsiPackages, обработайте событие BootstrapperCore.ExecuteMsiMessage. Аргументы события будут содержать сообщение, содержащее искомые данные.

  2. Чтобы настроить способ сжатия пакетов или нет, используйте атрибут Compress. Вы можете либо пометить весь Bundle/@Compress='no', либо пометить каждый пакет Compress='no' (или 'yes', если хотите пойти по этому пути).

--

Предложение: Обязательно добавьте DetectCondition в ExePackages, чтобы Burn узнал, присутствуют ли ExePackages уже или нет.

person Rob Mensching    schedule 27.02.2013
comment
Спасибо, Роб. Оба приведенных выше предложения очень хорошо служат моей цели. Я хотел бы знать, можно ли передать сообщение из моего ExecPackage обратно в загрузчик? Ситуация такая: у меня есть несколько командных файлов, которые нужно выполнить, и я делаю это с помощью ExecPackage. Основываясь на некоторых результатах в пакете, я хотел бы отобразить соответствующее сообщение для пользователя и представить параметры для продолжения / отмены / перезапуска и т. Д. - person microsoftprogrammer; 07.03.2013
comment
Продолжая мои комментарии выше ... Я думаю, мне, возможно, придется сохранить сообщение как запись реестра и получить его в событии ExecutePackageComplete. Есть ли другой способ сделать это? - person microsoftprogrammer; 08.03.2013
comment
В вашем исполняемом файле может быть реализован встроенный протокол записи для отправки подробных сообщений о ходе выполнения и ошибках. Это совсем не документировано, поэтому вам нужно будет пройти код записи, чтобы увидеть протокол, но он есть и даст вам именно то, что вы хотите. Также может оказаться полезным файл bundlerunner .csproj в исходном коде WiX. - person Rob Mensching; 08.03.2013