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í.

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

 

Predchádzajúci článok
Multilingual (Viacjazykové) aplikácie
Všetky články v sekcii
Programujeme vlastné Instant Messenger :: isim ::
Článok pre vás napísal David Jančík
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity