自定义 WiX Burn 引导程序用户界面?
Posted
技术标签:
【中文标题】自定义 WiX Burn 引导程序用户界面?【英文标题】:Custom WiX Burn bootstrapper user interface? 【发布时间】:2011-12-12 00:39:06 【问题描述】:我主要使用 WiX 3.6 创建安装包,以便我可以利用 Burn 引导功能。到目前为止,我已经捆绑了几个 MSI 包,它们将与内置引导程序应用程序 (WixStandardBootstrapperApplication.RtfLicense
) 一起安装。
我读到 Burn 允许通过指定自定义 UX.dll
来替换默认引导程序应用程序,但我还没有找到任何描述自定义 ux.dll
构造方式的资源(也就是说,它如何与 Burn 引擎集成,我使用什么技术,我应该实现什么接口等等)。
我的目标是创建一个品牌引导程序,它可以从用户那里收集任意信息并将该信息传递到各种捆绑的 MSI 文件、EXE 文件等。
所以我真的有两个问题:
-
默认引导程序应用程序的可定制程度如何?
是否有任何可用资源描述如何构建自定义
UX.dll
?
【问题讨论】:
我对 Burn 的了解不够,无法回答您的问题,但我认为除了 this 之外,文档还没有真正存在。还有来自recent newsgroup thread 的 Rob Menshing 关于文档状态的一些解释。 谢谢,戴夫。我确实在与 WIX 工具包一起安装的 CHM 中找到了 Bootstrapper Application Interface 文档。这是一个开始的地方。 【参考方案1】:要知道的关键是在 WiX 二进制文件中有一个 BootstrapperCore.dll,它定义了一个处理与 Burn 引擎集成的 BootstrapperApplication 类。我需要创建自己的派生类并覆盖“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 问题Specify the INSTALLLOCATION of packages in WiX inside the Burn managed bootstrapper 描述了如何设置和使用刻录变量来帮助驱动安装。
有了这些信息,我现在准备用我自己的自定义 Bootstrapper 应用程序对世界造成严重破坏!
【讨论】:
【参考方案2】:为了补充@Bill Campbell 的回答,我在writing a custom WiX Bootstrapper in .NET 上写了一系列博客文章,其中更深入地介绍了所涉及的部分,至少对于托管代码解决方案而言。
【讨论】:
【参考方案3】:不能准确回答这个问题,但是如果你想自定义 ManagedBootstrapperApplicationHost 的外观,那么this 是你需要做的。
为了简短起见,你需要像这样声明你的变量(我把它放在 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"/>
作为布局示例,您可以使用 mbapreq.thm,可在 WiX 源代码下找到。
【讨论】:
这篇文章的补充真是太棒了!我能够找到 mbapreq.thm here【参考方案4】:除了此处列出的其他资源之外,Custom WiX Managed Bootstrapper Application 是一个很好的 Burn 自定义引导程序应用程序的简单示例。
我发现这是一个很好的起点,然后再深入研究其他更全面的示例,例如 WiX 源代码中的 WixBA 项目。
【讨论】:
【参考方案5】:我在设置时遗漏的一个细节是我必须包含对WixBalExtension.dll
的引用。这是因为ManagedBootstrapperApplicationHost
是在该 DLL 中定义的,并在包中使用如下:
<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">
<Payload Name="BootstrapperCore.config"
SourceFile="MyBA.BootstrapperCore.config" />
<Payload SourceFile="MyBA.dll"/>
</BootstrapperApplicationRef>
【讨论】:
以上是关于自定义 WiX Burn 引导程序用户界面?的主要内容,如果未能解决你的问题,请参考以下文章
WiX 自定义操作在 MSI 中使用 [SourceDir] 和 Burn
Wix 3.7 Burn - 如何使用动态信息制作自定义启动画面