web-dev-qa-db-fra.com

Un exemple complet de bundle WiX 3.6 amorçant un profil client .NET 4

J'ai essayé de construire un exemple de travail d'un script d'installation WiX 3.6. Nous utilisons actuellement WiX 3.5 et maintenant nous aimerions commencer à installer le .NET 4 Client Profile Framework comme pré-requis pour notre MSI fichier que notre product.wxs le script crée. WiX 3.6 semble être la meilleure voie à suivre.

Existe-t-il un exemple fonctionnel de la façon de procéder avec WiX 3.6?

Voici notre script 3.5 que nous utilisons aujourd'hui:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.Microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.Microsoft.com/wix/UtilExtension">

    <!-- Version change handling -->
    <?define UpgradeCode="###############################"?>
    <?ifdef env.BUILD_NUMBER ?>
    <?define ProductVersion="2.6.$(env.BUILD_NUMBER).0"?>
    <?else ?>
    <?define ProductVersion="2.6.0.0"?>
    <?endif ?>

    <Product Id="*" Name="###############################" Language="1033" Version="$(var.ProductVersion)" Manufacturer="###############################" UpgradeCode="$(var.UpgradeCode)">
        <Package InstallerVersion="200" Compressed="yes" />

        <!-- Custom actions for this installer -->
        <Binary Id="###############################.dll" SourceFile="..\..\Libraries\###############################.CA.dll" />

        <!-- Kill ##### before installation begins -->
        <CustomAction Id="Kill#####ActionId" BinaryKey="###############################.dll" DllEntry="Kill#####Action" Execute="immediate" Impersonate="yes" Return="check" />
        <InstallExecuteSequence>
            <Custom Action="Kill#####ActionId" Before="InstallInitialize" />
        </InstallExecuteSequence>

        <!-- ADD/REMOVE Programs icon -->
        <Icon Id="##############.ico" SourceFile="D:\##############\Input_WIX\NonHeat\##############.exe" />
        <Property Id="ARPPRODUCTICON" Value="##############.ico" />
        <Property Id="ARPHELPLINK" Value="http://##############" />

        <!-- EULA agreement -->
        <WixVariable Id="WixUILicenseRtf" Value="D:\##############\Input_WIX\Heat\License.rtf" />

        <!-- Installer images -->
        <WixVariable Id="WixUIBannerBmp" Value="InstallerTopImage.rle" />
        <WixVariable Id="WixUIDialogBmp" Value="InstallerSideImage.rle" />
        <UIRef Id="WixUI_Minimal" />
        <Upgrade Id="$(var.UpgradeCode)">
            <UpgradeVersion Minimum="1.0.0.0" Maximum="99.0.0.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" />
        </Upgrade>

        <!-- Require ##### to be installed -->
        <Property Id="#####4.INSTALLPATH">
            <RegistrySearch Id="RegistryFoundInstallPath" Key="SOFTWARE\McNeel\#####ceros\4.0" Root="HKLM" Name="InstallPath" Type="directory" />
        </Property>
        <Property Id="#####4.RECENT">
            <RegistrySearch Id="RegistryFoundMostRecent" Key="SOFTWARE\McNeel\#####ceros\4.0" Root="HKLM" Name="MostRecent" Type="raw" />
        </Property>
        <Property Id="VRAYCOMMONDIR">
            <RegistrySearch Id="ReigstryVRayCommon" Key="Software\ASGvis" Root="HKLM" Name="Common_dir" Type="raw" />
        </Property>
        <Condition Message="##### 4 required before install">
            #####4.RECENT
        </Condition>

        <!-- Require administrator priveleges -->
        <Condition Message="You need to be an administrator to install this product.">
            Privileged</Condition>

        <!-- Require .NET 3.5 SP1 to install -->
        <PropertyRef Id="NETFRAMEWORK35_SP_LEVEL" />
        <Condition Message='This setup requires the .NET Framework 3.5 with Service Pack 1 be installed.'>
            <![CDATA[Installed OR (NETFRAMEWORK35_SP_LEVEL AND NETFRAMEWORK35_SP_LEVEL = "#1")]]>
        </Condition>

        <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="#####4.INSTALLPATH">
                <Directory Id="#####4.SYSTEM" Name="System"></Directory>
            </Directory>

            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLLOCATION" Name="##############"></Directory>
                <Directory Id="DesktopFolder" Name="Desktop" />
                <Directory Id="ProgramMenuFolder">
                    <Directory Id="ProgramMenuDir" Name="##############" />
                </Directory>
            </Directory>

            <!-- Set FULL permissions to our shared folders -->
            <Directory Id="CommonAppDataFolder">
                <Directory Id="CommonApp##############" Name="##############">
                    <Directory Id="MODELLIBPATH" Name="##############">
                        <Component Id="##############UserPermissions" Guid="##############">
                            <CreateFolder>
                                <util:PermissionEx GenericRead="yes" GenericWrite="yes" GenericExecute="yes" Delete="yes" DeleteChild="yes" User="Users" Domain="[MachineName]" />
                            </CreateFolder>
                        </Component>
                    </Directory>
                    <Directory Id="APPDATAPATH" Name="#####">
                        <Component Id="##############UserPermissions" Guid="FC4BF85F-E7A4-45DE-B25C-8F9419E75307">
                            <CreateFolder>
                                <util:PermissionEx GenericRead="yes" GenericWrite="yes" GenericExecute="yes" Delete="yes" DeleteChild="yes" User="Users" Domain="[MachineName]" />
                            </CreateFolder>
                        </Component>
                    </Directory>
                </Directory>
            </Directory>

            <Directory Id="FontsFolder"></Directory>
            <Component Id="##############RegistryKeys" Guid="17A55BEA-605D-425a-AAEE-F35EC8C1061E" DiskId="1" KeyPath="yes">
                <RegistryValue Id="##############RegInstallDir" Root="HKLM" Key="Software\##############\##############" Name="InstallPath" Action="write" Type="string" Value="[INSTALLLOCATION]" />
                <RegistryValue Id="##############RegLibraryPath" Root="HKLM" Key="Software\##############\##############" Name="LibraryPath" Action="write" Type="string" Value="[INSTALLLOCATION]Library" />
                <RegistryValue Id="##############RegModelLibraryPath" Root="HKLM" Key="Software\##############\##############" Name="ModelLibraryPath" Action="write" Type="string" Value="[MODELLIBPATH]" />
                <RegistryKey Id="##############Reg#####PluginKey" Root="HKLM" Key="Software\McNeel\#####ceros\4.0\[#####4.RECENT]\Plug-ins\FCAF502A-1572-42a9-A2C3-F25D7953B1A5\PlugIn" Action="create" />
                <RegistryValue Id="##############RegName#####4" Root="HKLM" Key="Software\McNeel\#####ceros\4.0\[#####4.RECENT]\Plug-ins\FCAF502A-1572-42a9-A2C3-F25D7953B1A5" Name="Name" Action="write" Type="string" Value="##############Server" />
                <RegistryValue Id="##############Reg#####4" Root="HKLM" Key="Software\McNeel\#####ceros\4.0\[#####4.RECENT]\Plug-ins\FCAF502A-1572-42a9-A2C3-F25D7953B1A5" Name="FileName" Action="write" Type="string" Value="[INSTALLLOCATION]##############\##############Server.rhp" />
                <RemoveRegistryKey Id="##############Skin" Root="HKLM" Key="Software\McNeel\#####ceros\4.0\Scheme: ##############" Action="removeOnInstall" />
            </Component>
            <Component Id="VRayKeys" Guid="{96E9EBAC-48B4-4517-9409-F921BE92B3AA}" DiskId="1" KeyPath="yes" NeverOverwrite="yes">
                <RegistryValue Id="VRayKey" Root="HKLM" Key="Software\##############\Data" Name="Data" Action="write" Type="string" Value="FFFAAA" />
            </Component>
            <Component Id="VRayRegistryKeys" Guid="{4D8815FA-85E2-421f-8BF9-F7F5A4133E96}" DiskId="1" KeyPath="yes" NeverOverwrite="yes" Permanent="yes">
                <Condition>
                    NOT VRAYCOMMONDIR
                </Condition>
                <RegistryValue Root="HKLM" Key="Software\ASGvis" Name="common_dir" Action="write" Type="string" Value="[INSTALLLOCATION]VRay\ASGVIS" />
            </Component>
        </Directory>
        <Feature Id="##############Features" Title="#####" Level="1">
            <ComponentGroupRef Id="##############" />
            <ComponentRef Id="##############LibraryUserPermissions" />
            <ComponentRef Id="##############SharedUserPermissions" />
            <ComponentRef Id="##############RegistryKeys" />
            <ComponentRef Id="VRayRegistryKeys" />
            <ComponentRef Id="VRayKeys" />
            <ComponentRef Id="ProgramMenuShortcuts" />
            <ComponentRef Id="#####App" />
            <ComponentRef Id="WixShortCut" />
            <ComponentRef Id="##############ShortCut" />
            <ComponentRef Id="TroubleShortCut" />
            <ComponentRef Id="DesktopShortcut" />
            <ComponentRef Id="VRayAuth" />
            <ComponentRef Id="Fonts" />
        </Feature>
        <InstallExecuteSequence>
            <RemoveExistingProducts Before="InstallInitialize" />
        </InstallExecuteSequence>
        <UI />
    </Product>

    <Fragment>
        <Icon Id="ShortCutIcon" SourceFile="D:\##############Stage\Input_WIX\NonHeat\##############.exe" />
        <Icon Id="TroubleShooterIcon" SourceFile="D:\##############Stage\Input_WIX\Heat\TroubleShooter\TroubleShooter.exe" />
        <Icon Id="TeamViewerIcon" SourceFile="D:\##############Stage\Input_WIX\Heat\support.exe" />
        <DirectoryRef Id="ProgramFilesFolder">
            <Component Id="ProgramMenuShortcuts" Guid="881BD571-4FAF-4aa4-AB6E-15BB1629BE06">
                <CreateFolder Directory="ProgramMenuDir" />
                <RemoveFolder Id="RemoveMenuShortcuts" Directory="ProgramMenuDir" On="uninstall" />
                <RegistryValue Root="HKCU" Key="Software\##############\##############ShortCut" Name="InstalledStartMenuShortcuts" Type="integer" Value="1" />
            </Component>
        </DirectoryRef>
        <!-- This file is not Heat'ed, so we need this to install the executable -->
        <DirectoryRef Id="INSTALLLOCATION" FileSource="Files">
            <Component Id="##############App" Guid="FA41A015-7D80-4e50-A909-94BBA4D7546A">
                <File Id="#####_Executable" Vital="yes" Source="D:\##############Stage\Input_WIX\NonHeat\##############.exe" />
            </Component>
        </DirectoryRef>
        <DirectoryRef Id="INSTALLLOCATION" FileSource="Files">
            <Component Id="WixShortCut" Guid="{8F2596B8-B7EC-4f40-AD64-DFC182A9353A}">
                <RegistryKey Root="HKCU" Key="Software\##############\##############ShortCut" Action="create">
                    <RegistryValue Name="ShortCut" Value="1" Type="integer" KeyPath="yes" />
                </RegistryKey>
                <Shortcut Id="ProgramMenuApplicationShortcut" Name="##############" Target="[###############_Executable]" Directory="ProgramMenuDir" Show="normal" Icon="ShortCutIcon" />
            </Component>
        </DirectoryRef>
        <DirectoryRef Id="INSTALLLOCATION">
            <Component Id="TroubleShortCut" Guid="{9E960528-8798-41DD-8DEE-9C3336CD3C88}">
                <RegistryKey Root="HKCU" Key="Software\#####\#####ShortCut" Action="create">
                    <RegistryValue Name="ShortCut2" Value="1" Type="integer" KeyPath="yes" />
                </RegistryKey>
                <Shortcut Id="TroubleshooterStartmenuShortcut" Name="Troubleshooter" Target="[INSTALLLOCATION]TroubleShooter\TroubleShooter.exe" Directory="ProgramMenuDir" Icon="TroubleShooterIcon" Show="normal"></Shortcut>
            </Component>
        </DirectoryRef>
        <DirectoryRef Id="INSTALLLOCATION">
            <Component Id="TeamViewerShortCut" Guid="{AD99CAC6-E485-444B-B075-2FD8BE4C87A8}">
                <RegistryKey Root="HKCU" Key="Software\#####\#####ShortCut" Action="create">
                    <RegistryValue Name="ShortCut3" Value="1" Type="integer" KeyPath="yes" />
                </RegistryKey>
                <Shortcut Id="TeamviewerStartmenuShortcut" Name="Remote Assistance" Target="[INSTALLLOCATION]support.exe" Directory="ProgramMenuDir" Icon="TeamViewerIcon" />
            </Component>
        </DirectoryRef>
        <DirectoryRef Id="INSTALLLOCATION" FileSource="Files">
            <Component Id="DesktopShortcut" Guid="{EA9632D1-08ED-4257-A78F-B2373A65A5CF}">
                <RegistryKey Root="HKCU" Key="Software\#####\##############ShortCut" Action="createAndRemoveOnUninstall">
                    <RegistryValue Name="desktopShortcut" Value="1" Type="integer" KeyPath="yes" />
                </RegistryKey>
                <Shortcut Id="DesktopShortcut" Directory="DesktopFolder" Name="#####" Icon="ShortCutIcon" Target="[######_Executable]" />
            </Component>
        </DirectoryRef>
        <DirectoryRef Id="FontsFolder">
            <Component Id="Fonts" Guid="{8C8EE16C-92B6-4926-A41C-55B79429071C}" NeverOverwrite="yes">
                <File Id="bradley" Source="Fonts\bradhitc.ttf" TrueType="yes" />
            </Component>
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <DirectoryRef Id="#####4.SYSTEM">
            <Component Id="VRayAuth" Guid="{ABED80D1-6EBA-48db-83E0-7CF48B0A55E8}">
                <File Id="VRayAuthFile" KeyPath="yes" Source="..\..\Libraries\VRayAuth.dll" />
            </Component>
        </DirectoryRef>
    </Fragment>
</Wix>
25
Jason Stevenson

Heath Stewart's Introducing Managed Bootstrapper Applications fournit un exemple de base dans son blog.

18
KMoraz

Vous devez créer un projet d'amorçage WiX distinct. Voir Building Bundles de packages d'installation dans la documentation WiX 3.6.

3
BryanJ

Une fois que vous avez votre bootstrapper, il vous suffit de:

  1. Ajoutez une référence au fichier WixNetFxExtension.dll dans votre projet d'application d'amorçage/d'amorçage géré.

  2. Ajoutez ce qui suit comme premier élément de votre chaîne.

    <PackageGroupRef Id="NetFx40Web"/>
    

C'est ça. De plus amples informations et options sont disponibles dans la documentation WixNetfxExtension .

2
Fetchez la vache