Lekce 14 - Tvorba instalátoru - Inno Setup
Na úvod bych měl zmínit, že instalátor z nějakého mě neznámého důvodu nedělám ve VisualStudiu, ale navyknul jsem si jej dělat v InnoSetup. Ve VS lze přidat nový projekt tuším že v Development & Setup a vybrat Setup. Poté by se měl objevit průvodce, kde se jen kliká. Stejně je to i v InnoSetup. Já se tu odkážu na fešáka sdraca nebo jak říká Vodáček zmijozeláka, který již InnoSetup nastínil: http://www.itnetwork.cz/…tup-compiler
Zde jen přidám pár informací.
VersionInfoVersion - nastavuje verzi souboru (ve vlastnostech
souboru) AppMutex - náš mutex nastavený v aplikaci - slouží
pro kontrolu běhu aplikace - instalátor vypíše upozornění, pokud aplikace
běží
[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
Uživateli dovolíme vybrat si jazyk instalátoru, který se pak nastaví i pro aplikaci:
[Languages] Name: "english"; MessagesFile: "compiler:Default.isl" Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl"
Nastavíme ikonci a cesty k souborům (šéfí průvodce).
[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 teď konečně to zajmavé. Kontrola přístupnosti požadované verze .NET FW a nastavení jazyku pro aplikaci.
[Code] function InitializeSetup(): Boolean; var keyExists: boolean; SPversion: Cardinal; Result1: boolean; ErrorCode: integer; begin
Result je proměnná, která určuje, zda bude instalátor
pokračovat nebo zda se ukončí. Záleží na její hodnotě (true/false) na
konci metody InitializeSetup().
Result := true;
Z registrů se vybere klíč SP v dané cestě. Ten obsahuje service pack verzi .NET FW verze 3.5. Pokud je null (keyExists == false) nebo je roven 0 (není nainstalován SP 1) tak se vypíše chybová hláška o nepřítomnosti potřebné verze .NET FW nabídne se jeho stažení a instalá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 provedení těchto náležitostí se vždy při změně stavu instlátoru
volá CurStepChanged. Zde si odchytím PostIsnstall
tedy poinstalační období a zapíšu jazykové nastavní pro aplikaci.
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 hodní, při případné odinstalaci mrkneme do registrů jestli tam nezůstal klíč spouštění po startu a smažeme jej.
[Registry] Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "ISIM messenger"; Flags: dontcreatekey uninsdeletevalue

