Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom WiX Burn bootstrapper user interface?

Tags:

wix

wix3.6

burn

I'm creating an installation package with WiX 3.6 primarily so I can take advantage of the Burn bootstrapping features. So far I have several MSI packages bundled together that will be installed with the built-in bootstrapper application (WixStandardBootstrapperApplication.RtfLicense).

I have read that Burn allows the default bootstrapper application to be replaced by specifying a custom UX.dll, but I haven't yet been able to locate any resources that describes how the custom ux.dll is constructed (that is, how it integrates with the Burn engine, what technologies do I use, what interfaces should I implement, etc.).

My goal is to create a branded bootstrapper that can collect arbitrary information from a user and pass that information onto the various bundled MSI files, EXE files, etc.

So I have two questions really:

  1. To what degree is the default bootstrapper application customizable?
  2. Are there any resources available that describe how to construct a custom UX.dll?
like image 697
Bill Campbell Avatar asked Oct 20 '11 18:10

Bill Campbell


2 Answers

The key thing to know is that there is a BootstrapperCore.dll in the WiX binaries that defines a BootstrapperApplication class that handles the integration with the Burn engine. I needed to create my own derived class and override the 'Run' method to launch my custom UI.

It was also helpful to use the WixBA project that defines the UI for the WiX bootstrapper as a reference for using the BootstrapperApplication class (src\Setup\WixBA\WixBA.csproj).

The markup I used to reference my custom bootstrapper DLL file is:

<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> 

The configuration file consists of:

<?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> 

I also followed other examples and appended

[assembly: BootstrapperApplication(typeof([name of class deriving from BootstrapperApplication]))] 

to the AssemblyInfo.cs file.

And lastly, Stack Overflow question Specify the INSTALLLOCATION of packages in WiX inside the Burn managed bootstrapper describes how to set and use Burn variables to help drive the installation.

Armed with this information I am now prepared to wreak havoc on the world with my very own custom Bootstrapper application!

like image 175
Bill Campbell Avatar answered Sep 23 '22 07:09

Bill Campbell


To supplement @Bill Campbell's answer, I've written a series of blog posts on writing a custom WiX Bootstrapper in .NET which goes into more depth about the pieces involved, at least for a managed code solution.

like image 35
John M. Wright Avatar answered Sep 19 '22 07:09

John M. Wright