Пользовательский пользовательский интерфейс загрузки WinX Burn?
Я создаю пакет установки с WiX 3.6 в первую очередь, поэтому я могу использовать функции Burn для начальной загрузки. Пока у меня есть несколько пакетов MSI в комплекте, которые будут установлены со встроенным загрузочным приложением (WixStandardBootstrapperApplication.RtfLicense
).
Я прочитал, что Burn позволяет заменить приложение bootstrapper по умолчанию, указав пользовательский UX.dll
, но я еще не смог найти какие-либо ресурсы, которые описывают, как создается пользовательский UX.dll
(т.е. как он интегрируется с движком Burn, какие технологии я использую, какие интерфейсы следует реализовать и т.д.).
Моя цель - создать фирменный загрузчик, который может собирать произвольную информацию у пользователя и передавать эту информацию в различные файлы MSI, EXE файлы и т.д.
Итак, у меня есть два вопроса:
- В какой степени настраивается приложение bootstrapper по умолчанию?
- Есть ли доступные ресурсы, которые описывают, как создать пользовательский
UX.dll
?
Ответы
Ответ 1
Главное знать, что в бинарных файлах WiX есть BootstrapperCore.dll, который определяет класс BootstrapperApplication, который обрабатывает интеграцию с движком Burn. Мне нужно было создать собственный производный класс и переопределить метод "Запуск", чтобы запустить пользовательский интерфейс.
Было также полезно использовать проект WixBA, который определяет интерфейс для загрузчика WiX как ссылку для использования класса BootstrapperApplication (src\Setup\WixBA\WixBA.csproj).
Разметка, которую я использовал для ссылки на мой загрузочный DLL файл bootstrapper:
<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost" >
<Payload SourceFile="$(var.InstallSourceResources)Bootstrapper\FusionInstallUX.dll"/>
<Payload Id="FusionInstallUX.config"
SourceFile="$(var.InstallSourceResources)Bootstrapper\FusionInstallUX.BootstrapperCore.config"
Name="BootstrapperCore.config" Compressed="yes"/>
</BootstrapperApplicationRef>
Файл конфигурации состоит из:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup
name="wix.bootstrapper"
type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.BootstrapperSectionGroup, BootstrapperCore">
<section
name="host"
type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.HostSection, BootstrapperCore" />
</sectionGroup>
</configSections>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
<wix.bootstrapper>
<host assemblyName="FusionInstallUX">
<supportedFramework version="v4\Full" />
<supportedFramework version="v4\Client" />
</host>
</wix.bootstrapper>
</configuration>
Я также следил за другими примерами и прилагаемыми
[assembly: BootstrapperApplication(typeof([name of class deriving from BootstrapperApplication]))]
в файл AssemblyInfo.cs
.
И, наконец, вопрос о переполнении стека Укажите установку INSTALLLOCATION пакетов в WiX внутри загрузочного загрузочного диска, записанного с помощью Burn, описано, как установить и использовать переменные Burn, чтобы помочь выполнить установку.
Вооружившись этой информацией, я теперь готов нанести ущерб миру с помощью своего собственного приложения Bootstrapper!
Ответ 2
В дополнение к ответу @Bill Campbell, я написал серию сообщений в блоге на написании пользовательского загрузочного буфера WiX в .NET, который более подробно описывает фрагменты участвуют, по крайней мере, для решения управляемого кода.
Ответ 3
В дополнение к другим ресурсам, перечисленным здесь, хороший пример bare-bones пользовательского загрузочного приложения для Burn - Пользовательское приложение для управляемого загрузочного устройства WiX.
Я обнаружил, что это хорошее место для начала, прежде чем углубляться в другие более подробные примеры, такие как проект WixBA в источниках WiX.
Ответ 4
Не точно ответьте на этот вопрос, но если вы хотите настроить внешний вид ManagedBootstrapperApplicationHost, то this - это то, что вам нужно сделать.
Короче говоря, вам нужно объявить свои переменные как это (я положил его перед BootstrapperApplicationRef)
<WixVariable Id="PreqbaThemeXml" Value="tt.thm" />
<WixVariable Id="PreqbaThemeWxl" Value="tt.wxl" />
Предполагая, что tt.thm - ваш файл темы, а tt.wxl - ваш файл перевода.
Обратите внимание, что эти файлы, а также все файлы, которые они ссылаются, должны быть включены в BootstrapperApplicationRef как Payoload, например
<Payload SourceFile="tt.wxl"/>
<Payload SourceFile="tt.wxl"/>
<Payload SourceFile="cat.png"/>
В качестве примера макета вы можете использовать mbapreq.thm, найденный в источниках WiX.
Ответ 5
Одна деталь, которую я отсутствовала при настройке, заключалась в том, что мне пришлось включить ссылку на WixBalExtension.dll
. Это потому, что ManagedBootstrapperApplicationHost
определяется в этой DLL и используется в следующем наборе:
<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">
<Payload Name="BootstrapperCore.config"
SourceFile="MyBA.BootstrapperCore.config" />
<Payload SourceFile="MyBA.dll"/>
</BootstrapperApplicationRef>