Po první části máme za sebou úvod, definování jednotlivých komponent souborů instalace, vytvoření zástupců atd., vše se ale instaluje bez zásahu uživatele přímo do definované složky c:\Program Files\Test Application (resp. c:\Program Files (x86)\Test Application). V této druhé části instalační proces rozšíříme o uživatelské rozhraní, hlavně o obrazovku na výběr adresáře kam se má instalace nainstalovat.
Ve WiXu jsou již v knihovně předpřipravené sady obrazovek, které určují posloupnost jednotlivých obrazovek v instalaci. První co tedy uděláme je to, že do našeho projektu přidáme referenci na tuto knihovnu WixUIExtension.dll.
Základní sady obrazovek v této knihovně jsou:
- WixUI_Minimal
Obsahuje pouze jeden kombinovaný uvítací dialog se zobrazením licenčních ujednání (WelcomeEulaDlg).
- WixUI_InstallDir
Obsahuje uvítací dialog (WelcomeDlg), zobrazení a potvrzení licenčních ujednání (LicenseAgreementDlg) a dialog pro výběr adresáře, kam bude aplikace instalována (InstallDirDlg). Neobsahuje výběr jednotlivých částí (features) instalace.
- WixUI_FeatureTree
Obsahuje uvítací dialog (WelcomeDlg), zobrazením a potvrzení licenčních ujednání (LicenseAgreementDlg) a dále rovnou obrazovku s výběr jednotlivých částí (features) instalace (CustomizeDlg). Výběr adresáře, kam bude aplikace instalována, je zde možné provádět na úrovni jednotlivých části instalace přímo na této obrazovce (pokud to mají features, povoleno).
- WixUI_Mondo
Tato zatím největší sada obsahuje vše co předchozí FeatureTree, po dialogu s potvrzením licenčních ujednání se ale nejprve zobrazí dialog s výběrem typu instalace - Typical, Custom a Complete (SetupTypeDlg). Do výběru jednotlivých komponent se dostaneme výběrem Custom, volby Typical a Complete tuto obrazovku přeskočí.
Pozn.: Obrazovky si můžete prohlédnout např. v tomto článku.
My jsme si pro naší instalaci vybrali sadu WixUI_InstallDir. Provedeme následující úpravy našeho instalačního kódu Product.wxs:
...
<ComponentGroup Id="ApplicationFiles">
...
</ComponentGroup>
<Property Id="WIXUI_INSTALLDIR" Value="APPLICATIONROOTDIRECTORY" />
<UIRef Id="WixUI_InstallDir" />
<UIRef Id="WixUI_ErrorProgressText" />
<Feature ...
Přidali jsme řádek s elementem UIRef, který říká, že budeme využívat definovanou UI sadu WixUI_InstallDir. Aby ale tato sada fungovala (resp. dialog InstallDirDlg), je nutné nastavit property WIXUI_INSTALLDIR, kde obrazovka očekává adresář, kam se bude aplikace instalovat, tu my máme nadefinovanou řádkem Directory jako APPLICATIONROOTDIRECTORY. Patřičné natavení tedy provádíme elementem Property. Dále zde ještě přidáváme druhý UI set pro chybové zprávy - WixUI_ErrorProgressText.
Pokud spustíme takto pozměněnou instalaci, dočkáme se ještě jednoho překvapení. Obrazovky sice fungují, ale jsou v angličtině (i když máme nastavené u Product atribut Language na češtinu tj. 1029). WiX z nějakého důvodu nezahrne české texty dialogů do instalace. Pokud by jsme do projektu přidali český lokalizační soubor (klidně i prázdný), jako to budeme dělat v další části článku, bude vše zase v pořádku.
Druhou možností jak vynutit v této fázi vývoje české texty (např. když lokalizaci provádět nechceme a stačí nám v MSI natvrdo pouze jeden jazyk čeština) je určení češtiny v nastavení projektu volbou Cultures to build hodnotou “cs-cz”. Jako hodnoty se zde zadávají language short string, seznam možných hodnot je zde.
Aby se ale pro obrazovky příslušný jazyk použil, musí WiX daný jazyk podporovat (jako např. češtinu), tabulka podporovaných překladů je zde.
Poslední úpravou naší instalace v této části, kterou můžeme provést, je výměna grafiky obrazovek.
V projektu přidáme do podadresáře Binary tyto soubory:
Dialog.bmp – Soubor obrázku úvodní obrazovky instalace, vyžadovány jsou rozměry 493x312px.
Banner.bmp – Soubor obrázku záhlaví použitého v dalších obrazovkách, vyžadovány jsou rozměry 493x85px.
Warning.ico, Info.ico – Icony výstrahy a Informace zobrazované v dialozích instalace.
NewFolder.ico, UpFolder.ico – Icony vytvoření nové složky a přechod do vyšší úrovně v dialogu výběru instalačního adresáře.
EULA_cz.rtf – Soubor vlastního textu licenčního ujednání ve formátu Rich Text.
Dále provedeme definování této nové grafiky:
...
<UIRef Id="WixUI_ErrorProgressText" />
<!-- Overrides for the default set of library images -->
<WixVariable Id="WixUIBannerBmp" Value="Binary\Banner.bmp" />
<WixVariable Id="WixUIDialogBmp" Value="Binary\Dialog.bmp" />
<WixVariable Id="WixUIExclamationIco" Value="Binary\Warning.ico" />
<WixVariable Id="WixUIInfoIco" Value="Binary\Info.ico" />
<WixVariable Id="WixUINewIco" Value="Binary\NewFolder.ico" />
<WixVariable Id="WixUIUpIco" Value="Binary\UpFolder.ico" />
<WixVariable Id="WixUILicenseRtf" Value="Binary\EULA_cz.rtf" />
Já jsem např. změnil instalační obrázky z výchozího WiX červeného na modrý, a ikony jsem vybral novější ve větší barevné hloubce. Mojí upravenou grafiku je možné stáhnout zde.
Celý wxs soubor instalace v této fázi vypadá tedy takto:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?define ProductName = "Testovací aplikace" ?>
<?define ProductVersion = "1.00.0000" ?>
<?define ManufacturerName = "IMP spol. s r. o." ?>
<?define ManufacturerWebUrl ="http://www.imp.cz" ?>
<?define DefaultInstallDir = "Test Application" ?>
<Product Id="9d1087df-cf07-4e86-ada3-ea51be107197" Name="$(var.ProductName)" Language="1029" Codepage="1250"
Version="$(var.ProductVersion)" Manufacturer="$(var.ManufacturerName)" UpgradeCode="37af4021-842f-4fc4-a3f1-f2e7861e3c21">
<Package InstallerVersion="301" Compressed="yes" Platform="x86" InstallPrivileges="elevated" InstallScope="perMachine"
ReadOnly="no" AdminImage="no" SummaryCodepage="1250"
Description="Testovací aplikace pro WiX setup" Manufacturer="$(var.ManufacturerName)" Keywords="Installer"
Comments="Copyright © 2011 IMP spol. s r.o., All rights reserved.
http://www.imp.cz" />
<!--Add / Remove Programs product information-->
<Icon Id="MainIcon" SourceFile="Binary\icon.ico"/>
<Icon Id="UninstallIcon" SourceFile="Binary\UninstallIcon.ico"/>
<Property Id="ARPPRODUCTICON" Value="MainIcon" />
<Property Id='ARPCOMMENTS'>Testovací aplikace pro WiX setup</Property>
<Property Id='ARPCONTACT'>$(var.ManufacturerName)</Property>
<Property Id='ARPURLINFOABOUT'>$(var.ManufacturerWebUrl)</Property>
<Media Id="1" Cabinet="TestApplication.cab" EmbedCab="yes" CompressionLevel="mszip" />
<!--Product components-->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="APPLICATIONROOTDIRECTORY" Name="$(var.DefaultInstallDir)">
<Component Id="TestApplication.exe" Guid="79f543da-21a9-4363-908a-a7ba065e860d">
<File Id="TestApplication.exe" Source="Release\TestApplication.exe"/>
</Component>
<Component Id="TestApplication.exe.config" Guid="fe862ead-e74b-4098-af40-1bb4576e8b80">
<File Id="TestApplication.exe.config" Source="Release\TestApplication.exe.config" />
</Component>
<Component Id="TestApplication.Library.dll" Guid="5f3b80c3-dcdc-4dcd-ae11-e8f24b3be4f4">
<File Id="TestApplication.Library.dll" Source="Release\TestApplication.Library.dll" />
</Component>
<Component Id="TestApplication.pdf" Guid="552d9071-f659-4836-844c-223541c22322">
<File Id="TestApplication.pdf" Name="Test Application.pdf" Source="Release\Test Application.pdf" />
</Component>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="$(var.ProductName)">
<Component Id="ApplicationShortcuts" Guid="6e618011-8885-4dd7-9565-ac2281e36186">
<RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
<Shortcut Id="ApplicationStartMenuShortcut" Directory="ApplicationProgramsFolder" Name="Testovací aplikace" Description="Testovací aplikace pro WiX setup"
Target="[APPLICATIONROOTDIRECTORY]TestApplication.exe" WorkingDirectory="APPLICATIONROOTDIRECTORY" IconIndex="0"/>
<Shortcut Id="DocumentationStartMenuShortcut" Directory="ApplicationProgramsFolder" Name="Dokumentace Testovací aplikace" Description="Uživatelská dokumentace Test Application"
Target="[APPLICATIONROOTDIRECTORY]Test Application.pdf" WorkingDirectory="APPLICATIONROOTDIRECTORY" IconIndex="0"/>
<Shortcut Id="ApplicationDesktopShortcut" Directory="DesktopFolder" Name="Testovací aplikace" Description="Testovací aplikace pro WiX setup"
Target="[APPLICATIONROOTDIRECTORY]TestApplication.exe" WorkingDirectory="APPLICATIONROOTDIRECTORY" IconIndex="0"/>
<Shortcut Id="UninstallShortcut" Name="Odinstalovat Testovací aplikaci" Description="Odinstalovat Testovací aplikaci"
Target="[System64Folder]msiexec.exe" Arguments="/x [ProductCode]"
Icon="UninstallIcon" IconIndex="0"/>
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" KeyPath="yes" />
</Component>
</Directory>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
<ComponentGroup Id="ApplicationFiles">
<ComponentRef Id="TestApplication.exe" />
<ComponentRef Id="TestApplication.exe.config" />
<ComponentRef Id="TestApplication.Library.dll" />
<ComponentRef Id="TestApplication.pdf" />
</ComponentGroup>
<Property Id="WIXUI_INSTALLDIR" Value="APPLICATIONROOTDIRECTORY" />
<UIRef Id="WixUI_InstallDir" />
<UIRef Id="WixUI_ErrorProgressText" />
<!-- Overrides for the default set of library images -->
<WixVariable Id="WixUIBannerBmp" Value="Binary\Banner.bmp" />
<WixVariable Id="WixUIDialogBmp" Value="Binary\Dialog.bmp" />
<WixVariable Id="WixUIExclamationIco" Value="Binary\Warning.ico" />
<WixVariable Id="WixUIInfoIco" Value="Binary\Info.ico" />
<WixVariable Id="WixUINewIco" Value="Binary\NewFolder.ico" />
<WixVariable Id="WixUIUpIco" Value="Binary\UpFolder.ico" />
<WixVariable Id="WixUILicenseRtf" Value="Binary\EULA_cz.rtf" />
<Feature Id="AlwaysInstall" Title="[ProductName]" Description="Test Application files" TypicalDefault="install" Display="expand" Absent="disallow" Level="1" >
<ComponentGroupRef Id="ApplicationFiles" />
<ComponentRef Id="ApplicationShortcuts" />
</Feature>
</Product>
</Wix>
Ve třetí části budeme pokračovat lokalizací instalace.
A opět některé odkazy k této části:
http://wix.sourceforge.net/manual-wix2/WixUI_dialog_library.htm
http://www.codeproject.com/KB/install/WixTutorial2.aspx