Základy pro vytváření instalátoru aplikace

Ondřej Linhart       28.07.2009       Offtopic       20402 zobrazení

Tento článek má za úkol obecně informovat o účelech instalátoru, naznačí co je nutné požadovat od instalátoru, seznámí se základy instalátoru Inno Setup a uvede praktický příklad vytvoření instalátoru.

Úvod

U každé profesionální desktopové aplikace je zvykem, aby měla svůj instalátor. Instalátor je program, který v podobě průvodce pomůže uživatelům aplikaci správně připravit k použití na cílovém počítači. Pod pojmem “správně připravit” si můžeme představit kombinaci následujících úkonů:

  • Shromáždění informací od uživatele (potvrzení licenční smlouvy, zadání jména, společnosti, případně sériového čísla, výběr instalovaných součástí)
  • Zkopírování souborů aplikace do zvolené (nebo výchozí) složky
  • Nainstalování podpůrných souborů (.NET Framework, DirectX, knihovny třetích stran, apod.)
  • Konfigurace aplikace (zaregistrování služby, rozhraní COM, asociace souborů, zápis hodnot do registru)
  • Vytvoření zástupců v nabídce Start, na pracovní ploše, nebo jinde
  • Volitelná instalace dalších aplikací (Adobe Reader)

Úkolem instalátoru je rovněž odstranění již nainstalované aplikace z počítače a to buď kompletně, nebo s ponecháním některých souborů (konfigurační a/nebo datové soubory, uložené hry, atd.), a možnost přidání, odebrání, nebo opravení součástí aktuálně nainstalované aplikace (většinou u velkých produktů jako Microsoft Office).

Zajišťovat tuto funkčnost v aplikaci samotné by byl velmi komplexní a hlavně zcela zbytečný úkol, přesto to některé nevychované aplikace (µTorrent) takto dělají.

Běžně používané produkty pro tvorbu instalátorů

Existuje celá řada produktů, které umí instalátor vytvořit buď pomocí “naklikání” vlastností (vizuálně), pomocí skriptu, nebo kombinací obojího.

 

Vizuální návrh

Skriptování

Zdarma

Subjektivní obtížnost**

Inno Setup

•*

1

Windows Installer

•*

5

InstallShield

3

Nullsoft Scriptable Install System

5

InstallAnywhere

?

3

Wise Installation Studio

?

2

*Pouze s použitím produktů třetích stran **1=nejjednodušší, 5=nejsložitější

Přestože Windows Installer je technologie ve Windows velmi rozšířená (nejen produkty Microsoftu, tuto technologii využívá např. i výše zmiňovaný InstallShield a Wise Installation Studio), mám s ní velmi špatné zkušenosti hlavně proto, že je neskutečně komplexní a je schopná nadělat v systému takový bordel, že už se ho nezbavíte. Bohužel pokud chcete aby se vaše aplikace honosila logem Designed for Windows, musíte pro instalaci využívat tuto technologii.

Co očekávat od instalátoru

Společná množina funkcí různých instalátorů je víceméně stejná, jednotlivé instalátory se ve většině případů liší pouze drobnostmi. Přesto je však při výběru instalátoru dobré vědět, jaké funkce musí bezpodmínečně umožňovat, což najdete v následujícím seznamu.

  • Kopírování souborů přímo z instalačního archivu (vhodné pro online distribuci) nebo z externího umístění (vhodné pro distribuci na instalačním médiu)
  • Vytváření zástupců v nabídce Start, na ploše, nebo jinde (panel Snadné spuštění) a to jak pouze pro aktuálního uživatele, tak pro všechny uživatele
  • Kontrola spuštěných aplikací před zahájením instalace (zda-li instalovaná aplikace není spuštěna)
  • Možnost výběru typu instalace a instalovaných součástí
  • Možnost ověřovat nastavení instalace v libovolném kroku a případně ukončit instalaci
  • Možnost odinstalování aplikace
  • Možnost instalování několika současně existujících verzí stejné aplikace, nebo upgrade již nainstalované aplikace
  • Zápis hodnot kamkoliv do registru (vytváření klíčů a hodnot pokud neexistují)
  • Spouštění programů a vyhodnocování návratových hodnot
  • Podpora lokalizace
  • Podpora 32-bitových i 64-bitových systémů
  • Podpora operačních systémů minimálně od Windows 2000 až po Windows 7

Všechna tato kritéria do puntíku splňuje Inno Setup, a proto se budu v dalších odstavcích soustřeďovat pouze na tento produkt.

Úvod do instalátoru Inno Setup

Deset let vývoje se velmi pozitivně podepsalo na tomto produktu, který v současné verzi 5.2.3 je schopný konkurovat i takovým gigantům jako je InstallShield. Jeho síla spočívá v jednoduchosti, spolehlivé kompatibilitě se všemi systémy Windows počínaje verzí 95 a obrovským možnostem rozšíření funkčnosti pomocí PascalScriptu (včetně možnosti vytvoření vlastních stránek v instalačním průvodci či přizpůsobení existujících stránek).

Inno Setup je v podstatě velmi jednoduchý editor instalačního skriptu se zvýrazňováním syntaxe, kompilátor instalačního skriptu a jednoduchý, avšak plně dostačující debugger. Součástí je také kompletní nápověda a ukázkové skripty. S touto zdarma dostupnou (i pro komerční účely) výbavičkou jste schopni vytvářet velmi profesionální, vícejazyčné instalátory na úrovni.

Komunita kolem Inno Setupu je obrovská, proto vznikají i další nástroje pro usnadnění práce, například ISTool, který umožňuje instalátor vytvořit vizuálně naklikáním vlastností (automaticky vytváří skript), nebo naprosto nedocenitelný Inno Setup Forms Designer (který se už bohužel nevyvíjí a jeho autor zmizel beze stopy), pro vizuální tvorbu vlastních stránek v průvodci instalací.

Pokud tedy hodláte číst dále, prvním krokem je stažení a nainstalování aktuální verze.

Teorie instalačního skriptu

Instalační skript je předpis, podle kterého kompilátor Inno Setupu vytvoří výsledný instalátor. Je to textový soubor, který svou strukturou připomíná INI soubor. Instalační skript NENÍ Case-sensitive, tj. nerozlišuje velká a malá písmena (stejně jako Visual Basic). Skript je rozdělen na tzv. sekce (stejně jako INI soubory), které oddělují různé kategorie nastavení instalátoru. Sekce jsou identifikovány názvem v hranatých závorkách, např. [Files]. Každá sekce obsahuje položky (název=hodnota), nebo parametry (název: “hodnota”) oddělené středníkem. Hodnoty parametrů jsou v úvozovkách, pro použití úvozovek přímo v hodnotě parametru je třeba úvozovky zdvojit (stejně jako ve Visual Basicu).

Sekce Význam
[Setup] Globální nastavení celého instalátoru. Nastavení vzhledu, chování, komprese, omezení…
[Types] Definice typů instalace. Běžně známé typy instalace jsou Úplná, Minimální, Vlastní. Lze však definovat i svoje vlastní.
[Components] Definice součástí instalace. Zde bych uvedl jako příklad instalaci Microsoft Office, kde lze vybírat jednotlivé součásti pro Word, Excel atd. a jejich podsoučásti. Komponenty mohou být přiřazeny jednotlivým typům.
[Tasks] Definice úloh, které lze volitelně provést po instalaci. Může to být například zobrazení souboru, spuštění aplikace, nebo přidání vyjímky do Brány firewall u síťové aplikace.
[Dirs] Dodatečné složky, které má instalátor vytvořit.
[Files] Všechny soubory, které mají být součástí instalace. Soubory mohou být přiřazeny jednotlivým komponentám.
[Icons] Ikony které má instalátor vytvořit. Mohou být v nabídce Start, na pracovní ploše, nebo v panelu Snadné spuštění. Ikony lze vytvářet buď pro všechny uživatele, nebo jen pro aktuálního uživatele.
[INI] Zde je možné modifikovat inicializační textové soubory, které se velmi dávno používaly ke konfiguraci aplikací.
[InstallDelete] Soubory, které mají být smazány v prvním kroku instalace. Může se jednat například o konfigurační soubory, ale k tomu se většinou používá jiná metodika (v sekci Files).
[Languages] Definice jazyků, které bude podporovat instalátor. Inno Setup standardně podporuje 20 světových jazyků včetně češtiny, další jazyky lze stáhnout nebo vytvořit dodatečně. U komerčních instalátorů většinou musíte za jazykové balíčky tvrdě platit.
[Messages] Zde je možné “přerazit” výchozí zprávy instalátoru definované v souborech *.isl
[CustomMessages] Vlastní zprávy lokalizované do požadovaných jazyků. Používá se v kombinaci se sekcí Languages a parametrem {cm:MessageName}.
[LangOptions] Možnosti zobrazení instalátoru (písmo, velikost, kódová stránka) pro různé jazyky.
[Registry] Vytváření, úpravy, odstraňování a nastavování oprávnění pro větve a klíče v registru.
[Run] Definuje co se má spustit po úspěšném nainstalování aplikace. Lze to spustit buď automaticky nebo po zaškrtnutí volby uživatelem.
[UninstallDelete] Stejné jako InstallDelete, ale pro odinstalaci.
[UninstallRun] Stejné jako Run, ale pro odinstalaci.

V instalačním skriptu lze používat konstanty, což jsou zkratky ve složených závorkách, za které kompilátor Inno Setupu dosazuje určité hodnoty (tedy spíše by se hodilo pojmenování proměnné). Konstanty se používají v parametrech. V následující tabulce je uveden seznam nejběžněji používaných konstant, popisovat zde všechny by bylo nošením dříví do lesa (v nápovědě Inno Setupu jsou skvěle zdokumentovány).

Konstanta Význam
{app} Cílová složka pro instalaci aplikace vybraná uživatelem
{src} Zdrojová složka ve které se nachází instalátor
{group} Programová skupina vybraná uživatelem
{commondesktop} Pracovní plocha společná pro všechny uživatele
{cm:MessageName} Vlastní lokalizovaná zpráva

Instalační skript dále může obsahovat společné parametry, které lze používat používat ve všech sekcích, které obsahují parametry oddělené středníky.

Společný parametr Význam
Languages Provede se pro uvedené jazyky
MinVersion Provede se pro systém se stejnou nebo vyšší verzí než uvedené verze
OnlyBelowVersion Provede se pro systém s nižší verzí než uvedené verze
Components Přiřazuje položku uvedeným součástem
Tasks Přiřazuje položku uvedeným úlohám

 

Praktická ukázka včetně specifikace požadavků na instalátor

Firma AB právě dokončila vývoj aplikace App. Jedná se o první verzi aplikace (1.0.0), která bude distribuována zákazníkům na instalačním médiu (CD). Aby byla aplikace profesionální a zákazník měl s rozchozením aplikace co nejmenší starosti, management firmy požaduje vytvoření instalátoru. Vývojové oddělení firmy ve spolupráci s managementem, který specifikoval požadavky pro instalátor, se dohodlo na následujícím řešení:

  • Aplikace je postavena na platformě Microsoft .NET Framework 3.5. Instalátor musí zjistit, zda-li je Framework přítomen a pokud není, nedovolí pokračovat v instalaci. Minimální verze operačního systému byla stanovena na Windows XP Service Pack 3.
  • Aplikace je lokalizována do češtiny a angličtiny včetně nápovědy. Uživatelské rozhraní instalátoru, všechna hlášení a položky vytvořené v nabídce Start musí být plně lokalizovány do obou jazyků. Bylo by dobré, aby se instalovaly pouze soubory pro vybranou jazykovou verzi. Soubor se změnami verzí lokalizován být nemusí.
  • Instalátor musí bez problémů umět aktualizovat aplikaci, pokud byla nalezena starší verze.
  • Aplikaci musí být možné odinstalovat a to standardním postupem z Ovládacích panelů (Přidat nebo odebrat programy).
  • Datové soubory aplikace nikdy nesmí být přepsány a musí zůstat na cílovém počítači i po odinstalování aplikace.
  • Aplikace používá také vlastní datové soubory (*.app), tyto musí být asociovány s aplikací.
  • Název programové složky v nabídce Start je dán napevno, lze zvolit pouze instalaci pro všechny uživatele nebo pouze pro aktuálního uživatele.
  • Instalovat aplikaci mohou pouze členové skupiny Administrators.
  • Pokud je aplikace spuštěna, nelze provést instalaci nebo odinstalaci.
  • Při instalaci by měla být možnost výběru instalovaných součástí.

Poznámka: Firma i název aplikace jsou smyšlené, pokud chcete skutečně otestovat funkčnost instalátoru, vytvořte následující soubory ve složce s instalačním skriptem (můžete použít libovolné soubory s uvedeným názvem, soubor aplikace by měl být spustitelný soubor):

App.exe, App.cs.chm, App.en.chm, Database\AppData.sdf, WhatsNew.txt

[Setup]
;Název aplikace
AppName=App
;Název aplikace včetně verze
AppVerName=App 1.0.0
;Výchozí složka pro instalaci aplikace, {pf}=umístění složky Program Files
DefaultDirName={pf}\App
;Zakázat zobrazení stránky s výběrem složky v nabídce Start,
;protože zástupci budou automaticky vytvořeni buď pro všechny uživatele,
;nebo pouze pro aktuálního uživatele. Tuto možnost stránka s výběrem složky
;v nabídce Start nijak jednoduše neumožňuje, je tam zobrazen seznam, ve kterém
;jsou sloučeny položky pro všechny uživatele s položkami pouze aktuálního uživatele.
DisableProgramGroupPage=yes
;Identifikátor aplikace (Mutex). Pokud je nalezen v paměti, instalátor nedovolí
;pokračovat v instalaci nebo odinstalaci. Tento Mutex musí nastavovat sama aplikace
;při spuštění a při ukončení je nutné ho zase uvolnit!
AppMutex=App100
;Minimální verze operačního systému, na který půjde aplikace nainstalovat (zde Windows XP Service Pack 3).
MinVersion=5.01.2600sp3
;Pokud je vytvořena asociace souborů s vaší aplikací (v registru), nastavením tohoto parametru
;na yes bude instalátor informovat operační systém o změně asociací a změny se hned projeví v systému
;(v opačném případě až po restartu systému).
ChangesAssociations=yes
[Languages]
;Nastavení jazyků podporovaných instalátorem. Jazyk použitý všude v instalátoru je vybrán
;uživatelem při spuštění instalace.
Name: "cs"; MessagesFile: "compiler:Languages\Czech.isl"
Name: "en"; MessagesFile: "compiler:Default.isl"
[Types]
;Definice typů instalace. Parametr iscustom určuje uživatelsky definovanou instalaci.
Name: "Full"; Description: "{cm:Full}"
Name: "Minimal"; Description: "{cm:Minimal}"
Name: "Custom"; Description: "{cm:Custom}"; Flags: iscustom
[Components]
;Definice součástí a jejich přiřazení k určitým typům instalace. Součást Application
;se bude instalovat vždy, nebude možné ji odškrtnout (parametr fixed).
;Součásti s lomítkem tvoří podkategorii příslušné součásti.
Name: "Application"; Description: "{cm:Application}"; Flags: fixed checkablealone; Types: Full Minimal Custom
Name: "Application\Help"; Description: "{cm:Help}"; Types: Full Custom
Name: "Application\Database"; Description: "{cm:Database}"; Types: Full Custom
[Tasks]
;Definice úloh, které budou volitelně provedeny v závěrečném kroku instalace.
;Z úloh označených parametrem exclusive lze vybrat pouze jednu.
Name: "AllUsersShortcuts"; Description: "{cm:AllUsersShortcuts}"; Flags: exclusive
Name: "CurrentUserShortcuts"; Description: "{cm:CurrentUserShortcuts}"; Flags: exclusive unchecked
Name: "RunApplication"; Description: {cm:RunApplication}
[Files]
;Soubory aplikace. Vše co není označeno parametrem external bude zkompilováno přímo
;do instalátoru (setup.exe). Parametr Components určuje do jaké součásti soubor patří,
;Languages určuje jazyk, pro který se bude soubor instalovat (je-li na začátku vybrána Čeština,
;bude se instalovat pouze česká nápověda, je-li vybrána angličtina, potom pouze anglická).
;Parametr onlyifdoesntexist nainstaluje soubor pouze pokud neexistuje v cílové složce,
;uninsneveruninstall označuje, že soubor nemá být odstraněn v rámci odinstalování.
Source: "{src}\App.exe"; DestDir: "{app}"; Components: Application
Source: "{src}\App.cs.chm"; DestDir: "{app}\Docs"; Components: Application\Help; Languages: cs
Source: "{src}\App.en.chm"; DestDir: "{app}\Docs"; Components: Application\Help; Languages: en
Source: "{src}\Database\AppData.sdf"; DestDir: "{commonappdata}\App"; Components: Application\Database; Flags: onlyifdoesntexist uninsneveruninstall
Source: "{src}\WhatsNew.txt"; DestDir: "{app}\Docs"; Components: Application; Flags: external isreadme
[Registry]
;Vytváření větví, klíčů a hodnot v registru. Tyto čtyři řádky zajišťují asociaci souborů
;*.app s aplikací. Pokud provádíte asociaci souborů s aplikací, nezapomeňte na položku
;ChangesAssociations=yes v sekci [Setup].
Root: HKCR; Subkey: ".app"; ValueType: string; ValueName: ""; ValueData: "AppFile"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "AppFile"; ValueType: string; ValueName: ""; ValueData: "{cm:FileType}"; Flags: uninsdeletekey
Root: HKCR; Subkey: "AppFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\App.exe,0"
Root: HKCR; Subkey: "AppFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\App.exe"" ""%1"""
[Icons]
;Všimněte si provázání položek s úlohami ([Tasks]) AllUsersShortcuts a CurrentUserShortcuts.
;Provede se buď vytvoření zástupců v nabídce Start pro všechny uživatele,
Name: "{commonprograms}\App\{cm:Application}"; Filename: "{app}\App.exe"; Tasks: AllUsersShortcuts
Name: "{commonprograms}\App\{cm:Help}"; Filename: "{app}\App.cs.chm"; Tasks: AllUsersShortcuts; Languages: cs
Name: "{commonprograms}\App\{cm:Help}"; Filename: "{app}\App.en.chm"; Tasks: AllUsersShortcuts; Languages: en
;nebo vytvoření zástupců v nabídce Start pouze pro aktuálního uživatele,
Name: "{userprograms}\App\{cm:Application}"; Filename: "{app}\App.exe"; Tasks: CurrentUserShortcuts
Name: "{userprograms}\App\{cm:Help}"; Filename: "{app}\App.cs.chm"; Tasks: CurrentUserShortcuts; Languages: cs
Name: "{userprograms}\App\{cm:Help}"; Filename: "{app}\App.en.chm"; Tasks: CurrentUserShortcuts; Languages: en
;podle toho co vybere uživatel při instalaci.
[Run]
;Zde je uvedeno, co má být spuštěno po dokončení instalace. Volitelné spuštění aplikace
;je rovněž provázáno s určitou úlohou (RunApplication).
Filename: "{app}\App.exe"; Tasks: RunApplication
[CustomMessages]
;Definice všech vlastních zpráv instalátoru ve všech podporovaných jazycích.
;Podporované jazyky jsou definovány v sekci [Languages], zde je zápis
;položek ve formátu NázevJazyku.Položka=Zpráva
;Konstanta %n znamená nový řádek (vbCrLf ve VB.NET).
cs.Application=App
cs.Help=Nápověda
cs.Database=Databázové soubory
cs.RunApplication=&Spustit aplikaci App
cs.Full=Kompletní
cs.Minimal=Minimální
cs.Custom=Vlastní
cs.FileType=Soubor aplikace App
cs.AllUsersShortcuts=Instalovat pro &všechny uživatele
cs.CurrentUserShortcuts=Instalovat pouze pro &aktuálního uživatele
cs.DotNetFxNotFound=Nebyla nalezena platforma Microsoft .NET Framework 3.5.%nNainstalujte prosím ručně tuto součást a spusťte instalátor znovu.
en.Application=App
en.Help=Help
en.Database=Database files
en.RunApplication=&Run App
en.Full=Full
en.Minimal=Minimal
en.Custom=Custom
en.FileType=App application's file
en.AllUsersShortcuts=Install for &all users
en.CurrentUserShortcuts=Install for ¤t user only
en.DotNetFxNotFound=Microsoft .NET Framework 3.5 platform was not found.%nPlease install this component manually and run installer again.
;V následující sekci je zapsán vlastní rozšiřující kód pro instalátor (PascalScript).
;V tomto případě se jedná o detekci .NET Frameworku 3.5.
[Code]
//Tato pevně definovaná funkce je volána při inicializaci instalátoru.
function InitializeSetup(): Boolean;
//Definice proměnných. Proměnné nelze definovat kdekoliv v kódu, je to nutné vždy na začátku.
var
  Data: Cardinal;
  Success: Boolean;
begin
  //Dotaz na hodnotu klíče v registru.
  Success := RegQueryDWordValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5', 'Install', Data);
  //Porovnání získaných hodnot.
  if ((not Success) or (Data <> 1)) then
  begin
    //Zobrazení dialogového okna se zprávou o chybějícím .NET Frameworku.
    //Zpráva je načtena z položky definované v [CustomMessages].
    MsgBox(CustomMessage('DotNetFxNotFound'), mbError, MB_OK);
    //Vynucené ukončení instalace.
    Abort();
  end;
end;
//Pro lepší porozumění PascalScriptu uvádím ekvivalentní VB.NET kód:

//Function InitializeSetup() As Boolean
//  Dim Data As Long
//  Dim Success As Boolean
//  Try
//    Data = CLng(Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5", "Install", 0))
//    Success = True
//  Catch
//  End Try
//  If ((Not Success) OrElse (Data <> 1)) Then
//    MessageBox.Show(String.Format("Nebyla nalezena platforma Microsoft .NET Framework 3.5.{0}Nainstalujte prosím ručně tuto součást a spusťte instalátor znovu.", vbCrLf), Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error)
//    End
//  End If
//End Function

 

hodnocení článku

1 bodů / 3 hlasů       Hodnotit mohou jen registrované uživatelé.

 

Mohlo by vás také zajímat

Silverlight 2 úvod

Zajímá vás psaní webových aplikací na straně klienta ve vašem oblíbeném nástroji v .NETu? Slyšeli jste o Silverlightu a chcete vědět jak funguje a jestli může pro vás být užitečný? Nebo jen máte zájem poznat možnosti nové webové technologie?

Spouštíme dotNETportal.cz

dotNETportal.cz je webový magazín a komunitní fórum zaměřené na vývoj aplikací v .NETu a Microsoft technologie. Najdete zde desítky článků, seriálů pro začátečníky a poměrně rozsáhlé diskusní fórum. Byl spuštěn v srpnu 2013.

Webináře zaměřené na .NET Core a .NET 5

 

 

Nový příspěvek

 

Instalator Inno Setup a Visual Studio

Pro NSIS a Inno Setup existuje plug-in Visual & Installer (visual-installer.com) ktery umi vytvaret Inno a NSIS instalatory primo z Visual Studia.

Oboji jsou velice dobre instalacni programy, doporucuji!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Základy pro vytváření instalátoru aplikace

knihovna pod názvem isxdl.dll

Bohužel nevím cestu do které mám vložit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Žádná knihovna ani žádný runtime není potřeba pro spuštění instalátoru vytvořeného pomocí Inno Setup. To je jedna z jeho hlavních výhod. Pokud používáte nějakou GUI hovadinu třetí strany pro vytvoření ISS skriptu, pak je to váš problém a proto to také nejde spustit samostatně. ISS skript je primitivní záležitost s komplexností INI souboru a žádné GUI klikadlo absolutně není potřeba.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vím, že to je troufalost, ale mohu Vás poprosit o opravu nebo nějakou Vaši či internetovou šablonu toho scriptu? Moc by mi to pomohlo a myslím, že mnoho budoucích návštěvníků za to bude ráda.

Moc děkuju za Váš čas a omlouvám se pokud byla moje prosba troufalá.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Detekce přítomnosti .NET Frameworku je v příkladu skriptu uvedeném v tomto článku, konkrétně v sekci [Code]. Jsou tam i další běžně používané věci včetně komentářů.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Základy pro vytváření instalátoru aplikace

Zadám to někomu jako zakázku.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Základy pro vytváření instalátoru aplikace

Tahle diskuse jako jediná mě pořádně zaujala. Hledám všude návod jak udělat v inno nebo jinde instalační balík, který zjistí zda je instalován net.framework a když by nebyl, tak by zahajil stažení a rovnou instalaci. Pokud by byl framework primo v baliku, tak to by mi bylo jedno.

Našel jsem tady návod jak docílit přímo toho co hledám celej den, ale bohužel na mě křičí, že nemá knihovnu. Knihovnu jsem si sice stáhnul, ale nevím kam jí mám umístit aby si jí vzal. Děkuju a snad mi nějaká dobrá duše poradí.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jakou knihovnu? Zde uvedený příklad instalačního skriptu ověří, zda je nainstalován .NET Framework 3.5 podle klíče v registru (oficiálně doporučený postup). Vše ostatní je problém aplikace samotné, ne Inno Setupu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Základy pro vytváření instalátoru aplikace

Dobrý den, lze nějak nastavit v inno, aby při odinstalaci smazal i nějaké záznamy v registru, které nevytvořil při instalaci?

Rozumějte:

Uživatel si v programu může "zaškrtnout" spouštění po startu windows, to řeším zápisem do registru. Pokud ale toto zaškrtnutí nezruší (tudíž se nesmaže záznam v registru) a odinstaluje se aplikace, záznam v registru zůstane.

Mohu tedy já nastavit, co všechno se má odinstalovat, nebo je to natvrdo dané?

Děkuji za odpověď...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Taková elementární věc samozřejmě jde udělat. Buď se už při instalaci vytvoří nějaká výchozí hodnota a u ní se pomocí příznaku nastaví odstranění po odinstalaci (čímž se vyhnete Pascal Scriptu), nebo to uděláte v sekci [Code] pomocí Pascal Scriptu, funkce RegDeleteValue, událost CurUninstallStepChanged=usPostUninstall.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji, vyzkouším...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Základy pro vytváření instalátoru aplikace

Zrovna nedávno jsem potřeboval vytvořit instalátor a při tom jsem hledal nějaký vhodný nástroj s podporou pro Windows Installer. Po dlouhém hledání jsem si vzpomněl na Dacris ActiSetup, který je od verze 4 k dispozici zdarma. Možná se to někomu bude hodit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Mimochodem, je jedna věc, kterou u Windows Installeru považuji za celkem zásadní - možnost nainstalovat assembly do GAC. S tím si, pokud vím, Inno Setup neporadí a vzhledem k tomu, že gacutil.exe není součástí .NET frameworku (resp. redistributable balíku), je nutné to řešit nějakým dalším nástrojem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Teď koukám, že poslední beta by to měla zvládat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano přesně tak. Nová betaverze Inno Setupu už to podporuje a u verze 5.2.3 se dá gacutil zahrnout do instalátoru, před zahájením instalace ho rozbalit do dočasné složky a po dokončení instalace použít a smazat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To šlo IMHO udělat vždy, ale jako řešení se mi to moc nelíbí. Nelze přibalit přímo gacutil (ten není možné z licenčních důvodů dále distribuovat), ale nějaký podobný nástroj.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

ono je v nějakých podmínkách že gacutil nesmím použít??

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ne použít, ale distribuovat. Na licenční smlouvy je Microsoft stejný odborník jako na Windows Phone, Zune, Kin, Windows 8 a Visual Studio 2012.

Každopádně je to jedno, Inno Setup umí instalovat do GAC nativně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A ještě jedna drobnost. Mám rád, když si instalátor může stáhnout a nainstalovat potřebnej framework (odpadne tím ukončení instalace, hledání frameworku, spuštění instalace, atd), proto jsem kdysi někde vyhrabal script, kterej se o to postará (už je to pár let, asi by se dal aktualizovat). Snad se to sem nějak šikovně vejde.

var
  dotnetRedistPath: string;
  downloadNeeded: boolean;
  dotNetNeeded: boolean;
  memoDependenciesNeeded: string;

procedure isxdl_AddFile(URL, Filename: PChar);
external 'isxdl_AddFile@files:isxdl.dll stdcall';
function isxdl_DownloadFiles(hWnd: Integer): Integer;
external 'isxdl_DownloadFiles@files:isxdl.dll stdcall';
function isxdl_SetOption(Option, Value: PChar): Integer;
external 'isxdl_SetOption@files:isxdl.dll stdcall';


const
  dotnetRedistURL = 'http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=cs&SrcCategoryId=&SrcFamilyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%2fdotnetfx.exe';
  // local system for testing...
  // dotnetRedistURL = 'http://localhost/dotnetfx.exe';

function InitializeSetup(): Boolean;

begin
  Result := true;
  dotNetNeeded := false;

  // Check for required netfx installation
  if (not RegKeyExists(HKLM, 'Software\Microsoft\.NETFramework\policy\v2.0')) then begin
    dotNetNeeded := true;
    if (not IsAdminLoggedOn()) then begin
      MsgBox('App needs the Microsoft .NET Framework to be installed by an Administrator', mbInformation, MB_OK);
      Result := false;
    end else begin
      memoDependenciesNeeded := memoDependenciesNeeded + '      .NET Framework 2.0' #13;
      dotnetRedistPath := ExpandConstant('{src}\dotnetfx.exe');
      if not FileExists(dotnetRedistPath) then begin
        dotnetRedistPath := ExpandConstant('{tmp}\dotnetfx.exe');
        if not FileExists(dotnetRedistPath) then begin
          isxdl_AddFile(dotnetRedistURL, dotnetRedistPath);
          downloadNeeded := true;
        end;
      end;
      SetIniString('install', 'dotnetRedist', dotnetRedistPath, ExpandConstant('{tmp}\dep.ini'));
    end;
  end;

end;

function NextButtonClick(CurPage: Integer): Boolean;
var
  hWnd: Integer;
  ResultCode: Integer;

begin
  Result := true;

  if CurPage = wpReady then begin

    hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));

    // don't try to init isxdl if it's not needed because it will error on < ie 3
    if downloadNeeded then begin

      isxdl_SetOption('label', 'Downloading Microsoft .NET Framework');
      isxdl_SetOption('description', 'App needs to install the Microsoft .NET Framework. Please wait while Setup is downloading extra files to your computer.');
      if isxdl_DownloadFiles(hWnd) = 0 then Result := false;
    end;
    if (Result = true) and (dotNetNeeded = true) then begin
      if Exec(ExpandConstant(dotnetRedistPath), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then begin
         // handle success if necessary; ResultCode contains the exit code
         if not (ResultCode = 0) then begin
           Result := false;
         end;
      end else begin
         // handle failure if necessary; ResultCode contains the error code
         Result := false;
      end;
    end;
  end;
end;

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
  s: string;

begin
  if memoDependenciesNeeded <> '' then s := s + 'Dependencies to install:' + NewLine + memoDependenciesNeeded + NewLine;
  s := s + MemoDirInfo + NewLine + NewLine;

  Result := s
end;

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tedy musím konstatovat že toto není ideální řešení. Jednak to pro stahování potřebuje externí knihovnu isxdl.dll a kdo ji má kde shánět, že. Framework se dá stáhnout pomocí kódu PascalScriptu i bez použití jakýchkoliv věcí třetích stran, ten kód tu dokonce kdysi kdesi uváděl T. Jecha. Pokud se aplikace distribuje na instalačním médiu, je ideální řešení distribuovat zároveň i Framework.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jistě, ta knihovna je automaticky součástí instalace, pokud používáte ISTool.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

nj a nedalo by se misto ukonceni instalace distribuovat treba webinstalator .net framework, ktery se ulozi do tempu a nastavi se mu flag deleteafterinstall a slozka bude {tmp} a z pascaloveho scriptu jej spustit? V .bat souboru bude akorat:

start /wait dotNetFx40_Full_setup.exe /passive

passive je lepsi nez quiet protoze ukazuje prubeh instalace a kdyz si to ma instalator stahnout z netu tak je to pohodlnejsi to videt samozrejmne pri detekci erroru zastavit instalaci. Jenze problem mi nastava v tom ze nevim jak v inno setup pascal kodu napsat aby spustil ten soubor popripade nejdriv vypsal hlasku s tim ze aplikace nebude fungovat bez .net framework a otazka jestli jej chce clovek nainstalovat a ano a ne po kliknuti na ano se nainstaluje ze souboru bylo by to jednodussi nez hledat na netu a stahovat to stranky mizi nebo muze byt error serveru a tak.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nevím jak je to s podmínkami distribuce webového instalátoru, pravděpodobně tam budou nějaká omezení. Libovolná aplikace nebo dokument se v PascalScriptu spouští funkcí ShellExec, viz. nápověda Inno Setupu. Žádné stránky nemizí a obzvlášť ne takové, odkud se stahují klíčové věci jako Framework.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Základy pro vytváření instalátoru aplikace

Ahoj,

chtěl bych se zeptat, zda existuje náhrada za Inno Setup Forms Designer nebo existuje jiná možnost, jak vytvářet vlastní grafické formuláře. Potřebuji vytvořit instalátor, do kterého chci přidat jednu vlastní obrazovku, která bude obsahovat textová pole (nebo comba) s nastavením, která se promítnou do instalované aplikace. S Inno Setup začínám, takže neznám všechny možnosti. V tomto článku jsem se dočetl o Form Designeru, ale bohužel se mi nedaří najít funkční odkaz na stažení.

Díky za odpověď.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

O žádném jiném nástroji pro vizuální návrh vlastních stránek v průvodci instalací nevím. Bohužel oficiální stránky tohoto špičkového nástroje zmizely stejně jako jeho autor, jedinou oficiální instalaci se mi podařilo najít zde: http://www.mediafire.com/?kcwb82d6i85x6i...

Je to verze 2.0.4, nejnovější je ale 2.0.8. Pokud najdu instalátor verze 2.0.8, napíšu to sem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za pomoc. Stáhnu a vyzkouším.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Po asi dvaceti minutách rabování různých smetišť (včetně ruských a čínských) jsem našel originální instalátor poslední verze 2.0.8:

http://higgs.rghost.ru/download/18004581...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Základy pro vytváření instalátoru aplikace

Kdyz vytvorim projekt ve visual basicu, ktery pracuje i s mysql databazi a mam tam pridane dalsi stazene reference tak jakym zpusobem mam tvorit instalator respektive z ceho jej mam tvorit. Kdyz to vytvorim z debug slozky kde je exe soubor a pridam do instalatoru tez podpurne dll soubory tak mi to na mem Pc funguje ale kdyz to zkousim u nekoho jinyho tak se mi aplikace nechce spustit a hlasi to kritickou chybu na nazev si bohuzel ted nevzpomenu a nemam zatim moznost to vyzkouset predem dekuji za radu

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Debug?! Soubory určené ke konečné distribuci vždy ze složky Release. Chyba bude v tom, že jste v instalačním skriptu nezahrnul některé potřebné soubory, nebo nenainstaloval např. ADO.NET Driver for MySQL, pokud je v aplikaci použit pro připojení k MySQL.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nene pouzivam pro pripojeni k databazi pouze a jenom mysql connector pro .net jinak mozna bude problem asi v tom .net framework nebo v necem v instalatoru urcite ne ten slape paradne jenom aplikace se nechce spustit

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A co myslíte že je ADO.NET Driver for MySQL? Connector/NET. Takže buď neinstalujete ten, nebo něco jiného. Pokud se ten Connector instaluje do GAC, tak Visual Studio jeho soubory automaticky nezkopíruje do složek Debug/Release a v tom bude ten problém.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

dobra dekuji za info a omlouvam se za nedorozumneni jinak nahodou nevite co s touhle chybou?

System.Runtime.InteropServices.COMException (0x800700AA): S požadovaným prostředkem se pracuje. (Výjimka na základě hodnoty HRESULT: 0x800700AA)v System.Windows.Forms.UnsafeNativeMethods.IWebBrowser2.Navigate2(Object& URL, Object& flags, Object& targetFrameName, Object& postData, Object& headers)v System.Windows.Forms.WebBrowser.PerformNavigate2(Object& URL, Object& flags, Object& targetFrameName, Object& postData, Object& headers)v System.Windows.Forms.WebBrowser.Navigate(String urlString)v WindowsApplication1.Form7.Timer1_Tick(Object sender, EventArgs e) v C:\Users\unknown\documents\visual studio 2010\Projects\appl\appl\Form7.vb:řádek 128v System.Windows.Forms.Timer.OnTick(EventArgs e)v System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)v System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)************** Načtená sestavení **************mscorlib

na radku 128 ve formu7 je WebBrowser1.Navigate(adresy(1, x))

a v tom poli jsou uvedeny adresy webu

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To si odlaďte sám, nejsem jasnovidec a ani se to netýká instalátoru.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Základy pro vytváření instalátoru aplikace

Dobrý den, chtěl jsem se zeptat, zkoušel jsem nastavit, aby se mi program spustil, ale pořád mi to píše toto: http://www.ulozisko.sk/obrazky/475633/In.... Nevíte někdo co stým?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ta chybová zpráva snad není dostatečně jasná? Vůbec tam není sekce [Messages] a v ní položka RunApplication.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Základy pro vytváření instalátoru aplikace

chcel by som vas poprosit o pomoc ako mam vytvorit instalacku s tim aby sa my cielovy program spustil vzdy pri starte pocitaca. Chcel by som ho umistnit do nabidky start programy po spusteny.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Záleží na tom, jakým způsobem chcete aplikaci spouštět. Pokud je program instalován pro konkrétního uživatele, potom je možné umístit zástupce do složky Po spuštění, nebo do registru (větev HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run). Pokud se má aplikace spouštět u každého uživatele, potom do registru (větev HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run). Jak zapisovat hodnoty do registru je uvedeno v tomto článku (sekce [Registry]).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

tomuto som pochopil no niesom si isty kam to mam napisat vzdy ked sa o to pokusim vyhodí chybu. Mohli by ste my to spisat a ja to tam len vlozim HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

Dakujem

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Sekce [Registry] včetně příkladu s použitím konstant je zde popsána myslím dost srozumitelně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Konečne sa mi to podarilo spustit

diky za pomoc

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Základy pro vytváření instalátoru aplikace

Věru pěkné, ten příklad s Innem se mi vážně líbil...

P.S.: Já vím, že je to jenom demonstrace, ale má smysl psát aplikaci pro detekci .NETu ve VB.NET X-D

nahlásit spamnahlásit spam -2 / 2 odpovědětodpovědět

Jak už je tam napsáno, ta ukázka kódu ve VB.NET je tam pouze a jenom k lepšímu porozumění PascalScriptu, ve kterém je detekce napsaná, ne k praktické implementaci.

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

Ano, to je mi jasné, jenom poukazuji na ten paradox. Samozřejmě, že ten příklad má být jen převedení kódu do našeho oblíbeného VB.NET

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback