我正在创建一个主要使用WiX 3.6的安装包,因此我可以利用Burn引导功能。到目前为止,我有几个捆绑在一起的MSI软件包,它们将与内置的bootstrapper应用程序(WixStandardBootstrapperApplication.RtfLicense
)一起安装。
我已经读过Burn允许通过指定自定义UX.dll
来替换默认的引导程序应用程序,但是我还没有找到描述自定义ux.dll
如何构造的任何资源(也就是说,它如何与Burn引擎集成,我使用什么技术,应该实现哪些接口等等。)
我的目标是创建一个品牌引导程序,它可以从用户收集任意信息并将该信息传递到各种捆绑的MSI文件,EXE文件等。
所以我真的有两个问题:
UX.dll
?答案 0 :(得分:39)
要知道的关键是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应用程序对世界造成严重破坏!
答案 1 :(得分:21)
为了补充@Bill Campbell的回答,我在writing a custom WiX Bootstrapper in .NET上撰写了一系列博客文章,这些博文更深入地介绍了所涉及的内容,至少对于托管代码解决方案而言。
答案 2 :(得分:5)
除了此处列出的其他资源之外,Burn的自定义引导程序应用程序的一个很好的例子是 Custom WiX Managed Bootstrapper Application 。
我发现这是一个很好的开始,然后深入研究其他更全面的例子,比如WiX源中的WixBA项目。
答案 3 :(得分:4)
不准确回答这个问题,但是如果你想自定义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"/>
作为布局示例,您可以使用在WiX源下找到的 mbapreq.thm 。
答案 4 :(得分:3)
我在设置时遇到的一个细节是我必须包含对WixBalExtension.dll
的引用。这是因为ManagedBootstrapperApplicationHost
在该DLL中定义并在包中使用,如下所示:
<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">
<Payload Name="BootstrapperCore.config"
SourceFile="MyBA.BootstrapperCore.config" />
<Payload SourceFile="MyBA.dll"/>
</BootstrapperApplicationRef>