14. díl - Tvorba instalátoru - Inno Setup

C# .NET Pro pokročilé Instant Messenger Tvorba instalátoru - Inno Setup

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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

 

  Aktivity (1)

Článek pro vás napsal David Jančík [sczdavos]
Avatar
Autor je vášnivý programátor v .NET C# a PHP. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.

Jak se ti líbí článek?
Celkem (1 hlasů) :
55555


 



 

 

Komentáře

Avatar
Tol
Neregistrovaný
Avatar
Tol:

Pro Visual Studio (2005, 2008, 2010 a 2012) existuje Inno Setup plug-in - www.visual-installer.com.
Takze jde vytvaret Inno instalatory primo vo VS nejen jako Development & Setup project ale primo Inno Setup project.

 
Odpovědět 15.8.2013 8:04
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Tol
David Čápka:

Pluginy umí jen placená verze VS a ta má vlastní systém na tvorbu instalaček. Express neumí pluginy, takže ani tam to nebude užitečné.

Odpovědět 15.8.2013 9:34
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.