Tvoříme instalace k programům v Inno Setup Compiler
Pokud jste vytvořili nějaký program nebo hru a chcete ho publikovat na webu, určitě jste přemýšleli o tom, že k němu vytvoříte instalaci. K tvorbě instalací je mnoho různých programů - některé jsou zadarmo, některé placené, některé nefungují na Vistách a W7, některé obsahují reklamy. Jeden program ale výrazně vyčnívá z řady a to Inno setup compiler.
Inno setup compiler je volně šiřitelný a plně
uzpůsobitelný program k tvorbě instalací pro systém Windows. Je extrémně
jednoduchý na ovládání a obsahuje mnoho možností. Proto je to
nejpoužívanější instalační program, který využívají
jak volně šiřitelné, tak placené programy i hry (např. Skype).
V Innosetupu se programuje pomocí skriptu, který se také může automaticky vygenerovat jednoduchým průvodcem. Kromě všech základních operací jako vložení zástupce na plochu, nabídek start či rychlého spuštění obsahuje mnoho vychytávek.
V tuto chvíli mě napadá možnost vložení vlastních textů a obrázků do installeru, zajištění práv ve windows Vista a Windows 7, podpora více jazyků, kontrola běžícího programu pomocí mutexu (aby uživatel program nejdříve vypnul, když ho přeinstalovává novou verzí), zobrazení a potvrzení licenčních podmínek, podpora skinů, díky možnosti zvolení vysoké komprese má instalace velmi malou velikost (jen pár KB navíc). Pro pokročilejší uživatele není problém díky zabudovanému skriptovacímu jazyku podobnému Pascalu naprogramovat nejrůznější kontroly a funkce (například stahování potřebných balíčků nebo kontrolu přtomnosti .NET frameworku).
Skript Inno setupu vypadá následovně:
Nyní malé zamyšlení nad tím, proč k programu instalaci přidat...
5 důvodů, proč by měl program obsahovat instalaci
- Jednoduchost a přehlednost. Průvodce instalací je plně
přizpůsobitelný, jednoduchý a přehledný. Je navržený tak, aby seděl
každému uživateli. Pohodně nainstaluje vaši aplikaci, zařadí ji do
seznamu nainstalovaných aplikací, podle volby uživatele vytvoří ikonu na
ploše, v nabídce start nebo v rychlém spuštění. Samozřejmě také
obsahuje stejně rychlou odinstalaci.
- Četnější používání - Díky tomu, že je program
uveden v seznamu nainstalovaných aplikací, v nabídce start a případně i
jako ikona na ploše, uživatel dotyčný program nejen nezapomene používat,
ale také ho používá častěji. Nejhorší, co může být, je program bez
instalace zahrabaný ve složce na ploše, pojmenované "Nová složka 5".
Další výhodou je, že se váš program neobjeví někde ke stažení nějak
osekaný v zipu, jak to mají portable verze zvykem. Každý si stáhne
originální instalaci a to povětšinou z vašeho webu.
- Dostupnost - Nepotřebujete žádný winzip ani winrar,
nemusíte pro nic vytvářet složku, program je dostupný každému.
- Zpětná vazba přes web - Po instalaci je u vaší
aplikace v nabídce start odkaz na internetové stránky, velmi jednoduchá
cesta pro spokojeného uživatele dostat se k vám pro další software či
informace. Možná namítáte, že mohu dát adresu do nějakého about dialogu
přímo v aplikaci. Jistě, že mohu, ale jak již jsem se zmínil - velmi mnoho
lidí je zvyklých hledat link zde, protože většina softwaru ho tam prostě
má.
- Windows je na to navržený - Všichni, kteří odsuzujete
instalace, si uvědomte, že Microsoft Windows je systém, navržený pro
instalace. Takto se do něj prostě programy dostávají. Ten, kdo instalace
nepoužívá, se ochuzuje o možnosti systému Windows, které pro
nainstalované aplikace nabízí (mám na mysli nabídku start, nainstalované
aplikace a podobně, divili byste se, kolik lidí toto používá).
Není divu, že každý komerční software má instalaci Instalace není většinou jen u
méně oblíbených freewarových aplikací nebo u programů, kterým
nezáleží na popularitě a stahovanosti.
Mýty o instalacích
Nechává to bordel v počítači, každá instalace mi počítač zpomalí - Innosetup je kvalitní program, který za sebou nezanechává žádný "bordel" v počítač, jak si mnozí anti-instalátoři myslí. Někdy se podívejte, co vám nechávají v registrech někteé programy bez instalace.
Instalace zdržují - Tento argument jsem nikdy nepochopil.
Je přeci rychlejší 3x kliknout na tlačítko "Další" a jednou na "Spustit",
než vytvářet novou složku -> napsat název programu -> otevřít zip a
rozbalit ho. Většina programů totiž v zipu nemá složku, ale rovnou její
obsah, čili složka se musí vytvořit. Některé "zipovací" programy sice
nabízí možnost rozbalit do složky, ale když zip otevíráme např. ze
správce stahování Firefoxu, nevyvoláme pravý klik pro ropzbalení do
složky. Nehledě na to, že když tam složka již náhodou je, stejně musím
program znovu přesunout. O dialozích pokud nemáme registrovaný Winrar
raději vůbec nemluvím
Program s instalací je větší a déle se stahuje - Opět není pravda, díky zmiňované vysoké kompresi velikost souboru nabyde opravdu jen o pár KB, čili soubor se může stahovat pomaleji jen o zlomek vteřiny, čehož si člověk nikdy nemůže ani všimnout.
Ukázkové skripty
Zde jsem připravil několik skriptů, které nejvíce používám. Skripty se píší (pokud není zmíněno jinak) do zvláštního bloku [Code], který je nutno vytvořit na konci instalačního skriptu.
Nastavení vlastního obrázku při instalaci:
Určitě si přejete, aby se při instalaci zobrazilo logo vaší aplikace, které může vypadat následovně:
Kód:
WizardImageFile=c:\vasobrazek.bmp
Skript vložte do bloku [Setup]
Velikost obrázku musí být 164x314 px.
Je možné upravit i menší obrázek výše a to příkazem
WizardSmallImageFile. Jeho velikost musí být 55x55 px.
Kontrola přítomnosti .NET frameworku:
Pokud programujete pro .NET Framework (např. v C#) a potřebujete zajistit, aby měl uživatel před spuštěním vaší aplikace nainstalovaný .NET Framework V 2.0, můžete využít následující skript, který ověří existenci .NETu a případně vyvolá výzvu k jeho stažení:
[Code] function InitializeSetup(): Boolean; var ErrorCode: Integer; NetFrameWorkInstalled : Boolean; Result1 : Boolean; begin NetFrameWorkInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\.NETFramework\policy\v2.0'); if NetFrameWorkInstalled =true then begin Result := true; end; if NetFrameWorkInstalled = false then begin NetFrameWorkInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\.NETFramework\policy\v2.0'); if NetFrameWorkInstalled =true then begin Result := true; end; if NetFrameWorkInstalled =false then begin //Result1 := (ExpandConstant('{cm:dotnetmissing}'), mbConfirmation, MB_YESNO) = idYes; Result1 := MsgBox('Tento program vyžaduje .NET Framework minimální verze 2.0, který nebyl na Vašem počítači nalezen, pravděpodobně kvůli neaktuálnímu systému. Přejete si ho nyní stáhnout?', mbConfirmation, MB_YESNO) = idYes; if Result1 =false then begin Result:=false; end else begin Result:=false; ShellExec('open', 'http://www.sdraco.cz/dotnet20.htm', '','',SW_SHOWNORMAL,ewNoWait,ErrorCode); end; end; end; end;
Kontrola spuštěného programu:
Pokud si uživatel instaluje novou verzi vašeho programu, neměla by být stará verze spuštěna. Když se její soubory používají, nemohou být přepsány za nové. Inno setup compiler disponuje kontrolou tzv. Mutexu, který se používá ke kontrole běžících aplikací. Mutex každé aplikace má své unikátní jméno "např. Mutex_me_aplikace" a je velmi snadné ho do aplikace vložit. Do innosetupu se vkládá do bloku [Setup] a to následujícím příkazem:
AppMutex=Mutex_me_aplikace,Global\Mutex_me_aplikace
Uložení jazyka zvoleného při instalaci pro pozdější využití v naší aplikaci
Docela dlouho mi trvalo, než jsem přišel na způsob, jak svou aplikaci při prvním spuštění přepnout do toho jazyka, který uživatel zvolil při její instalaci. Zprvu jsem si myslel, že bude jazyk zapsán v registrech, údajně tam je, ale nepodařilo se mi ho najít. Rozhodl jsem se tedy využít souboru, do kterého uložím obsah konstanty {language}, kde je uložený zvolený jazyk. Níže uvedený příkaz vytvoří soubor v adresáři aplikace a pokud již existuje, jeho obsah přepíše. Měl by se provést až po instalaci. Jak na to je popsáno v dalším tipu níže.
SaveStringToFile(ExpandConstant('{app}')+'\language.dat', ExpandConstant('{language}'), False);
Provedení skriptu před instalací a po instalaci
Následující kód obsahuje dvě procedury, z nichž jedna se provede před instalací (kopírováním souborů) a druhá těsně po ní. Ke zjištění stavu instalace se využívá událost CurStepChanged.
procedure DoPreInstall(); begin MsgBox('Před instalací.', mbInformation, MB_OK); end; procedure DoPostInstall(); begin MsgBox('Po instalaci.', mbInformation, MB_OK); end; procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep = ssInstall then begin DoPreInstall(); end else if CurStep = ssPostInstall then begin DoPostInstall(); end; end;
Stažení
Program Inno setup compiller naleznete ke stažení na adrese http://www.jrsoftware.org