自定义WiX Burn引导程序用户界面?

47

我正在使用WiX 3.6创建安装包,主要是为了利用Burn引导程序功能。目前我已经将几个MSI包捆绑在一起,并将使用内置的引导程序应用程序(WixStandardBootstrapperApplication.RtfLicense)安装。

我了解到Burn允许通过指定自定义UX.dll来替换默认的引导程序应用程序,但我还没有找到任何资源描述如何构建自定义ux.dll(即如何与Burn引擎集成,使用了什么技术,应该实现哪些接口等)。

我的目标是创建一个品牌化的引导程序,可以从用户那里收集任意信息并将该信息传递给各种捆绑的MSI文件、EXE文件等。

所以我有两个问题:

  1. 默认引导程序应用程序可定制程度如何?
  2. 是否有任何资源可用来描述如何构建自定义UX.dll?

1
我对Burn不够了解,无法回答你的问题,但我认为文档目前还不存在,除了这个。最近的一个新闻组主题中,Rob Menshing也有一些解释关于文档的状态。 - Dave Andersen
1
谢谢,Dave。我确实在安装WIX工具包时的CHM中找到了引导程序应用接口文档。那是一个好的起点。 - Bill Campbell
5个回答

40

关键要知道的是,在WiX二进制文件中,有一个名为BootstrapperCore.dll的文件,其中定义了一个BootstrapperApplication类,该类处理与Burn引擎的集成。我需要创建自己的派生类并重写“Run”方法以启动我的自定义UI。

使用定义WiX引导程序UI的WixBA项目作为使用BootstrapperApplication类的参考也很有帮助(src\Setup\WixBA\WixBA.csproj)。

我用于引用自定义引导程序DLL文件的标记是:

<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文件。

最后,Stack Overflow问题在Burn托管引导程序中指定包的INSTALLLOCATION描述了如何设置和使用Burn变量来帮助驱动安装。

有了这些信息,我现在准备用自己的自定义引导程序应用程序给世界带来灾难!


26

6

虽然不是直接回答这个问题,但如果您想要自定义ManagedBootstrapperApplicationHost的外观,则需要执行此操作

简单来说,您需要像这样声明变量(我将其放在BootstrapperApplicationRef之前):

<WixVariable Id="PreqbaThemeXml" Value="tt.thm" />
<WixVariable Id="PreqbaThemeWxl" Value="tt.wxl" />

假设tt.thm是您的主题文件,tt.wxl是您的翻译文件。 请注意,这些文件以及它们引用的所有文件必须作为Payoload包含到BootstrapperApplicationRef中。
<Payload SourceFile="tt.wxl"/>
<Payload SourceFile="tt.wxl"/>
<Payload SourceFile="cat.png"/>

作为布局的例子,您可以使用在WiX源代码中找到的mbapreq.thm

1
这篇文章的一个很棒的补充!我能够在这里找到_mbapreq.thm_。 - sirdank

6
除了这里列出的其他资源,一个很好的裸骨示例是用于Burn的自定义引导程序应用程序 Custom WiX Managed Bootstrapper Application
我发现在深入研究其他更详细的示例(如WiX源代码中的WixBA项目)之前,这是一个很好的起点。

3

在设置这个时,我忽略了一个细节,那就是我必须包含对WixBalExtension.dll的引用。因为ManagedBootstrapperApplicationHost在该DLL中定义,并像这样在捆绑包中使用:

<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">
      <Payload Name="BootstrapperCore.config"
               SourceFile="MyBA.BootstrapperCore.config" />
      <Payload SourceFile="MyBA.dll"/>
</BootstrapperApplicationRef>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接