web-dev-qa-db-fra.com

Interface utilisateur d'amorçage WiX Burn personnalisée?

Je crée un package d'installation avec WiX 3.6 principalement afin que je puisse profiter des fonctionnalités d'amorçage Burn . Jusqu'à présent, j'ai plusieurs packages MSI regroupés qui seront installés avec l'application de démarrage intégrée (WixStandardBootstrapperApplication.RtfLicense).

J'ai lu que Burn permet de remplacer l'application de démarrage par défaut en spécifiant un UX.dll Personnalisé, mais je n'ai pas encore pu trouver de ressources décrivant comment le ux.dll Personnalisé est construit ( c'est-à-dire comment il s'intègre au moteur Burn, quelles technologies dois-je utiliser, quelles interfaces dois-je implémenter, etc.).

Mon objectif est de créer un programme d'amorçage de marque capable de collecter des informations arbitraires auprès d'un utilisateur et de transmettre ces informations aux différents fichiers MSI, EXE, etc.

J'ai donc vraiment deux questions:

  1. Dans quelle mesure l'application de démarrage par défaut est-elle personnalisable?
  2. Y a-t-il des ressources disponibles qui décrivent comment construire un UX.dll Personnalisé?
44
Bill Campbell

L'essentiel à savoir est qu'il existe BootstrapperCore.dll dans les binaires WiX qui définit une classe BootstrapperApplication qui gère l'intégration avec le moteur Burn. Je devais créer ma propre classe dérivée et remplacer la méthode "Run" pour lancer mon interface utilisateur personnalisée.

Il était également utile d'utiliser le projet WixBA qui définit l'interface utilisateur pour le bootstrapper WiX comme référence pour l'utilisation de la classe BootstrapperApplication (src\Setup\WixBA\WixBA.csproj).

Le balisage que j'ai utilisé pour référencer mon bootstrapper personnalisé DLL est:

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

Le fichier de configuration se compose de:

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

J'ai également suivi d'autres exemples et ajouté

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

à la AssemblyInfo.cs fichier.

Et enfin, la question Stack Overflow Spécifiez l'INSTALLLOCATION des packages dans WiX à l'intérieur du Bootstrapper géré par Burn décrit comment définir et utiliser les variables Burn pour aider à conduire l'installation.

Armé de ces informations, je suis maintenant prêt à faire des ravages dans le monde avec ma propre application Bootstrapper personnalisée!

40
Bill Campbell

Pour compléter la réponse de @Bill Campbell, j'ai écrit une série de billets de blog sur écriture d'un Bootstrapper WiX personnalisé dans .NET qui approfondit les éléments impliqués, au moins pour une solution de code managé.

23
John M. Wright

En plus des autres ressources répertoriées ici, un bon exemple simple d'une application d'amorçage personnalisée pour Burn est Application d'amorçage managée WiX personnalisée.

J'ai trouvé que c'est un bon endroit pour commencer avant de creuser plus profondément dans d'autres exemples plus approfondis comme le projet WixBA dans les sources WiX.

5
Dave Andersen

Pas précisément répondre à cette question, mais si vous souhaitez personnaliser l'apparence de ManagedBootstrapperApplicationHost, alors this est ce que vous devez faire.

Pour rester bref, vous devez déclarer vos variables comme ceci (je le mets avant BootstrapperApplicationRef)

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

en supposant que tt.thm est votre fichier de thème, et tt.wxl est votre fichier de traduction. Notez que ces fichiers, ainsi que tous les fichiers auxquels ils font référence, doivent être inclus dans BootstrapperApplicationRef en tant que Payoload , comme

<Payload SourceFile="tt.wxl"/>
<Payload SourceFile="tt.wxl"/>
<Payload SourceFile="cat.png"/>

Comme exemple de disposition, vous pouvez utiliser mbapreq.thm , trouvé sous les sources WiX.

4
ironic

Un détail qui me manquait lors de la configuration était que je devais inclure une référence à WixBalExtension.dll. C'est parce que le ManagedBootstrapperApplicationHost est défini dans ce DLL et utilisé dans le bundle comme ceci:

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