14. diel - Tvorba inštalátora - Inno Setup
Na úvod by som mal spomenúť, že inštalátor z nejakého ma neznámeho dôvodu nerobím vo VisualStudio, ale navyknul som si ho robiť v Inno Setup. Vo VS možno pridať nový projekt tuším že v Development & Setup a vybrať Setup. Potom by sa mal objaviť sprievodca, kde sa len kliká. Rovnako je to aj v Inno Setup. Ja sa tu odkážem na fešáka sdraca alebo ako hovorí Vodáček zmijozeláka, ktorý už Inno Setup načrtol: http://www.itnetwork.cz/...tup-compiler
Tu len pridám pár informácií.
VersionInfoVersion
- nastavuje verziu súboru (vo vlastnostiach
súboru) AppMutex
- náš mutex nastavený v aplikácii - slúži
pre kontrolu behu aplikácie - inštalátor vypíše upozornenie, ak aplikácia
beží
[Setup] AppId={{AE67302E-F4EC-4F2E-ACF9-52F649F090AC} AppName=ISIM messenger AppVersion=1.20 AppVerName=ISIM messenger 1.20 VersionInfoVersion=1.20 AppPublisher=IslandSoftware AppPublisherURL=http://www.itnetwork.cz/ AppSupportURL=http://www.itnetwork.cz/csharp/pokrocile/isim AppUpdatesURL=http://www.itnetwork.cz/csharp/pokrocile/isim/isim-devbook-cz-instant-messenger DefaultDirName={pf}\ISIM messenger DefaultGroupName=ISIM messenger AllowNoIcons=yes OutputDir=C:\..\Setup OutputBaseFilename=isim_messenger_setup SetupIconFile=C:\..\ISIM - open source messenger\isim_icon.ico Compression=lzma SolidCompression=yes AppMutex=ISIM messenger,Global\ISIM messenger AppCopyright=sczdavos [David Jančík], www.devbook.cz
Používateľovi dovolíme vybrať si jazyk inštalátora, ktorý sa potom nastaví aj pre aplikáciu:
[Languages] Name: "english"; MessagesFile: "compiler:Default.isl" Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl"
Nastavíme ikonke a cesty k súborom (sefi sprievodca).
[Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1 [Files] Source: "C:\..\ISIM - open source messenger\ISIM - open source messenger.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\..\ISIM - open source messenger\ISIM - open source messenger.exe.config"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\..\ISIM - open source messenger\isim_icon.ico"; DestDir: "{app}"; Flags: ignoreversion Source: "C:\..\ISIM - open source messenger\graphics\*"; DestDir: "{app}\graphics"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "C:\..\ISIM - open source messenger\plugins\*"; DestDir: "{app}\plugins"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "C:\..\ISIM - open source messenger\sounds\*"; DestDir: "{app}\sounds"; Flags: ignoreversion recursesubdirs createallsubdirs [Icons] Name: "{group}\ISIM messenger"; Filename: "{app}\ISIM - open source messenger.exe" Name: "{group}\{cm:ProgramOnTheWeb,ISIM messenger}"; Filename: "http://www.itnetwork.cz/csharp/pokrocile/isim/isim-devbook-cz-instant-messenger" Name: "{commondesktop}\ISIM messenger"; Filename: "{app}\ISIM - open source messenger.exe"; Tasks: desktopicon Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\ISIM messenger"; Filename: "{app}\ISIM - open source messenger.exe"; Tasks: quicklaunchicon [Run] Filename: "{app}\ISIM - open source messenger.exe"; Description: "{cm:LaunchProgram,ISIM messenger}"; Flags: nowait postinstall skipifsilent
Tak a teraz konečne to Zaujímavé. Kontrola prístupnosti požadovanej verzie .NET FW a nastavenie jazyka pre aplikáciu.
[Code] function InitializeSetup(): Boolean; var keyExists: boolean; SPversion: Cardinal; Result1: boolean; ErrorCode: integer; begin
Result
je premenná, ktorá určuje, či bude inštalátor
pokračovať alebo či sa ukončí. Záleží na jej hodnote (true / false) na
konci metódy InitializeSetup()
.
Result := true;
Z registrov sa vyberie kľúč SP v danej ceste. Ten obsahuje service pack verziu .NET FW verzia 3.5. Ak je null (keyExists == false) alebo sa rovná 0 (nie je nainštalovaný SP 1) tak sa vypíše chybová hláška o neprítomnosti potrebnej verzie .NET FW ponúkne sa jeho stiahnutie a inštalátor nepokračuje:
keyExists := RegQueryDWordValue(HKLM,'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 'SP', SPversion); if ((keyExists = false) or (SPversion = 0)) then begin Result := false; if((ExpandConstant('{language}')) = 'czech') then begin Result1 := MsgBox('Aplikace vyžaduje .NET Framework min. v.3.5 SP1, který ve vašem počítači nebyl nalezen. Přejete si jej nyní stánout? (bez něj aplikaci nelze spustit)', mbConfirmation, MB_YESNO) = idYes; end else begin Result1 := MsgBox('This application needs .NET Framework min. v.3.5 SP1, which is not installed on your computer. Would you like to download it? (you cannot run this app without it)', mbConfirmation, MB_YESNO) = idYes; end; if (Result1 = true) then begin ShellExec('open', 'http://www.microsoft.com/download/en/details.aspx?id=22', '','',SW_SHOWNORMAL,ewNoWait,ErrorCode); end; end; end;
Po vykonaní týchto náležitostí sa vždy pri zmene stavu instlátoru
volá CurStepChanged
. Tu si odchytím PostIsnstall
teda poinštalačný obdobie a zapíšem jazykové Nástavné pre
aplikáciu.
procedure CurStepChanged(CurStep: TSetupStep); var lang : String; begin if CurStep = ssPostInstall then begin lang := 'en-GB'; if((ExpandConstant('{language}')) = 'czech') then begin lang := 'cs-CZ'; end; SaveStringToFile(ExpandConstant('{userappdata}\ISIM messenger\lang.ini'), ExpandConstant(lang), False); end; end;
A páč sme dobrí, pri prípadnej odinštalácii mrkneme do registrov či tam nezostal kľúč spúšťanie po štarte a zmažeme ho.
[Registry] Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "ISIM messenger"; Flags: dontcreatekey uninsdeletevalue