IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

 

Předchozí článek
Multilingual (vícejazyková) aplikace
Všechny články v sekci
Programujeme vlastní Instant Messenger ::ISIM::
Článek pro vás napsal David Jančík
Avatar
Uživatelské hodnocení:
1 hlasů
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity