47

我主要使用 WiX 3.6 创建一个安装包,以便我可以利用Burn引导功能。到目前为止,我已经将几个 MSI 软件包捆绑在一起,它们将与内置的引导程序应用程序 ( WixStandardBootstrapperApplication.RtfLicense) 一起安装。

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

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

所以我真的有两个问题:

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

5 回答 5

41

要知道的关键是 WiX 二进制文件中有一个BootstrapperCore.dll,它定义了一个BootstrapperApplication 类,用于处理与 Burn 引擎的集成。我需要创建自己的派生类并覆盖“运行”方法来启动我的自定义 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 问题Specify the INSTALLLOCATION of packages in WiX inside the Burn managed bootstrapper描述了如何设置和使用 Burn 变量来帮助驱动安装。

有了这些信息,我现在准备用我自己的自定义 Bootstrapper 应用程序对世界造成严重破坏!

于 2011-10-25T19:13:25.930 回答
26

为了补充@Bill Campbell 的回答,我写了一系列关于在 .NET 中编写自定义 WiX Bootstrapper的博客文章,其中更深入地介绍了所涉及的部分,至少对于托管代码解决方案。

于 2013-09-20T04:01:09.050 回答
6

除了此处列出的其他资源之外,用于 Burn 的自定义引导程序应用程序的一个很好的基本示例是自定义 WiX 托管引导程序应用程序

在深入研究其他更全面的示例(例如 WiX 源代码中的 WixBA 项目)之前,我发现这是一个很好的起点。

于 2013-09-24T20:38:51.083 回答
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 。

于 2013-04-05T11:55:49.110 回答
3

我在设置时缺少的一个细节是我必须包含对WixBalExtension.dll. 这是因为ManagedBootstrapperApplicationHost在该 DLL 中定义并在包中使用如下:

<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">
      <Payload Name="BootstrapperCore.config"
               SourceFile="MyBA.BootstrapperCore.config" />
      <Payload SourceFile="MyBA.dll"/>
</BootstrapperApplicationRef>
于 2013-10-29T15:50:20.780 回答