V druhém, posledním, dílu si upravíme vzhled instalátoru a přidáme vlastní sériové číslo.
Ve druhé části článku o tvorbě instalátoru ve Visual Studiu se podíváme na grafické úpravy setupu, konkrétně na User Interface designer. Tato část by měla být čtivější, protože už nejspíš opadla nervozita z psaní mého prvního článku :-). Tak jdeme na to.
Jak už název napovídá, díky User Interface designeru můžeme nastavit vzhled samotné instalačky – to, co uvidí uživatel. Do UI se dostaneme stejně jako do File System designeru – v Solution Exploreru klikneme na projekt s instalátorem pravým tlačítkem myši, zvolíme View
a pak User Interface
.
Položky, které vidíte, jsou jednotlivá okna instalace, přehledně rozdělená do tří sekcí: Start (obsahuje uvítací okna, licence, atd.), Progress, který znázorňuje průběh instalace, a nakonec End (např. klasické okno s tlačítkem Finish po dokončení instalace).
To jsme si probrali typy oken, ale co znamenají „Install“ a „Administrative Install“? Je to dost jednoduché, „Administrative Install“ využijete, když chcete instalovat aplikaci po síti v rámci jedné pracovní skupiny. Instalátor se zkopíruje na síť a všichni, kdo mají dostatečná práva, si ji mohou nainstalovat, jakoby instalovali z CD. Jak už je asi jasné ze struktury rozdělení, oba dva typy instalací mohou mít vlastní vzhled. My využijeme normální „Install“ metodu.
Bohužel, není jiný způsob, jak zjistit aktuální vzhled našeho okna, než zkompilováním a spuštěním instalace (aspoň co je mi známo). Nemůžeme spustit instalaci v „debug“ módu, jako to děláme s normální aplikací.
Upravit instalaci můžeme hned několika způsoby:
- Upravovat vzhled jednotlivých oken. Každé okno instalace má jiné možnosti nastavení. Jednoduše klikněte v UI designeru na některou z položek pravým tlačítkem a zvolte
Properties Window
. - Můžeme zpřeházet pořadí oken pomocí přetažení (Drag & Drop).
- Okno můžeme i smazat: kliknout na něj a stisknout Del.
- A samozřejmě ho můžeme i přidat: klikneme pravým tlačítkem myši na některý ze „setup states“ (to jsou ty Start, Progress a End) a zvolíme
Add Dialog
.
Při použití poslední možnosti máme na výběr z několika předdefinovaných oken, teď je ten pravý čas probrat si, jak se s nimi zachází a co všechno umí.
Každé z oken je udělané za nějakým účelem a poskytuje poměrně málo možností nastavení. Většina umožňuje nastavit vlastnost BannerBitmap, což je obrázek (logo,…) nahoře v okně (výchozí nastavení je bílý pruh s počítačem).
Vlastnost | Popis |
Splash | Úvodní obrazovka; jediné, co umožňuje, je zobrazit nějaký obrázek (logo společnosti, programu,…). |
Welcome | Druhá úvodní obrazovka, tuhle použijete určitě častěji: pomocí vlastností CopyrightWarning a WelcomeText můžete nastavit zobrazené copyrighty, resp. nějaký uvítací text. |
License Agreement | Klasické licenční podmínky s možnostmi „I Agree“ a „I Do Not Agree“, načítají se z RTF souboru. |
Customer Information | Slouží pro zjištění jména uživatele. Další nepovinné vlastnosti jsou ShowOrganization pro TextBox na zadání názvu společnosti a ShowSerialNumber pro možnost zadání sériového klíče (popsáno níže). |
Progress | Okno, které ukazuje momentální stav instalace na ProgressBaru. |
Register User | Toto okno obsahuje tlačítko „Register Now“, které může odkazovat na webovou stránku, nebo na jiný program (pomocí vlastností Executable a nastavení argumentů pomocí Arguments). |
Read Me | Obsahuje text, který přečte ze souboru ve formátu RTF, který nastavíte pomocí vlastnosti ReadmeFile. |
Nejspíš jste si všimli, že některá okna kromě vlastnosti BannerBitmap obsahují i booleanovskou vlastnost Sunken. Ta určuje, jestli bude nebo nebude obsah okna „zapuštěný“ do pozadí. Špatně se to popisuje, takže tady ukázka na obrázcích:
Asi si říkáte „Co takhle nějaké větší možnosti nastavení?“. Nebudou :-).
Můžeme přidávat přednastavená okna, ale o nějaké větší možnosti (třeba vytvoření celého svého okna, přidat nějakou svoji funkci,…) nás bohužel Microsoft ošidil.
Jak už jsem naznačil výše, teď trochu podrobněji popíšu vlastnosti ShowSerialNumber a SerialNumberTemplate, zároveň to bude to poslední, co dnes uděláme.
Pro zabránění instalace bez platného sériového čísla použijeme vlastnost SerialNumberTemplate. Už z názvu je patrné, že se jedná o nějakou šablonu. Díky ní můžeme nastavit tvar sériového čísla, které bude muset uživatel zadat. Nemůžeme přímo zjišťovat pomocí nějaké svojí metody, jestli je zadané číslo validní, ale opět se budeme muset spolehnout na funkce vestavěné v MSI.
Hodnotu vlastnosti SerialNumberTemplate dáme mezi znaménka „je menší než“ a „je větší než“ – „<“ a „>“. Díky tomu se jednotlivé znaky neobjeví přímo v TextBoxu.
V šabloně můžeme použít tyto znaky:
- # – vyžaduje číslo, neprovádí žádné další kontroly
- % – vyžaduje číslici a provádí kontrolu
- ? – to samé co #, ale požaduje číslo nebo písmeno
- ^ – požaduje písmeno
- < a > – jakýkoliv znak nalevo, resp. napravo od těchto znaků nebude v poli vidět (proto uvozují hodnotu vlastnosti SerialNumberTemplate)
Pokud napíšete číslici nebo písmeno „jen tak“, bude předem vepsané do pole sériového čísla, ale tento postup nám udělá další TextBox. Další možnost, jak udělat nový TextBox, je napsání jakéhokoliv jiného znaku (kromě klíčových), typicky se používá pomlčka. Aby se nám vůbec nějaký TextBox zobrazil, nastavíme přepneme vlastnost ShowSerialNumber na true.
Teď je načase vysvětlit, co se myslí tím „provádí/neprovádí kontrolu“. MSI obsahuje jednoduchý algoritmus pro kontrolu, jestli jsou zadaná čísla správná (při použití %). Vezme všechny číslice v pozadí označené %, seřadí je za sebou a vydělí 7. Pokud je zbytek po dělení 0, kontrola proběhla úspěšně a instalace může pokračovat.
Na ukázku jsem připravil číslo s kódem <P%R??oG-%%-#?%>, dostaneme pole skládající se ze sedmi TextBoxů.
Pokud vyplníme například P7RBloG-07-9b7, instalace se nám vesele spustí, protože číslo 7077 je skutečně dělitelné 7 beze zbytku.
A to je vše. Teď byste měli být schopní vytvořit si opravdu jednoduchý, přesto funkční instalátor, který má i něco „navíc“ oproti prvnímu dílu. Kurz sice končí, ale nevylučuji, že se v budoucnu nepodíváme na nějaká pokročilejší témata. Problémy a poznatky pište do komentářů, jen to uvítám.