Pagina 1 din 1

Inno Setup, utilizare, un mic tutorial

Scris: 06 Oct 2013, 18:50
de Manu
Inno Setup este un program pentru creare pachete de instalare, programat in Embarcadero Delphi de Jordan Russell si Martijn Laan.

Pentru a crea un pachet de instalare se scriu randuri de cod intr-un editor, randuri in care se specifica tot felul de detalii precum:
Numele programului, folderul principal, grupul din start menu, tot felul de iconite, limbi de instalare, chei pentru registri si multe multe altele.
Fisierul care contine aceste randuri instructiuni este simplu text, are extensia .ISS.

Fisierul seamana oarecum cu unul .INI, sunt mai multe sectiuni definite intre paranteze drepte, precum: [Setup], [Languages], [Files], [Registry], [run], [Icons] etc.

Pun mai jos un astfel de fisier de configurare, cel pe care l-am creat pentru jocul Pontes Escape.
Dupa exemplul acesta, mai scriu si alte informatii generale:

Cod: Selectaţi tot

; Prima sectiune defineste informatii de baza, le comentez cu ";" (punct si virgula):
[Setup]
; Un id unic al aplicatiei, poate fi generat automat unul din optiuni:
AppId={{6988E549-D821-4267-BCDC-DC9132D228AD}
; Numele aplicatiei
AppName=Pontes Escape
; Numele si versiunea:
AppVerName=Pontes Escape 1.1
; Folderul de baza, la el ne vom referi apoi cu [app], ramane o constanta:
DefaultDirName={pf}\Pontes Games\Pontes Escape
AppPublisher=Asociatia Pontes
AppPublisherURL=http://www.pontes.ro/
AppSupportURL=http://www.games.pontes.ro/
AppUpdatesURL=http://www.games.pontes.ro/
; Sa nu intrebe unde vrem sa instalam, am vrut fortat in Program Files\Pontes Games::
DisableDirPage=yes
; Sa nu intrebe ce grup vrem in Start Menu:
DisableProgramGroupPage=yes
; Care sa fie grupul din Start Menu:
DefaultGroupName=Pontes Games\Pontes Escape
; Continutul unui fisier care sa apara la inceput, inainte de a da un Next:
InfoBeforeFile=Inainte.txt
; Iconita fisierului installer.exe:
SetupIconFile=Pontes.ico
; Fisierul rezultat in urma compilarii:
OutputBaseFilename=Pontes_Escape_Ro_Installer
; Tipul compresiei:
Compression=none
SolidCompression=no

; Sectiunea pentru limbi, daca sunt definite mai multe, apare un combo la inceputul instalarii:
[Languages]
Name: "Romana"; MessagesFile: "compiler:Languages\Romanian.isl"

; Mesaje care sa apara pe parcursul instalarii, sectiunea [messages]:
[Messages]
BeveledLabel=www.pontes.ro DIT

: Fisierele de instalare, de unde sa le ia si unde sa le puna.
; In general le punem in [app], adica in folderul din {pf} (constanta pentru Program Files):
[Files]
Source: "Pontes Escape.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "Pontes.ico"; DestDir: "{app}"; Flags: ignoreversion
Source: "Sigla.jpg"; DestDir: "{app}"; Flags: ignoreversion
Source: "sounds.dat"; DestDir: "{app}"; Flags: ignoreversion
Source: "Ajutor Pontes Escape.html"; DestDir: "{app}"; Flags: ignoreversion;
Source: "*.dll"; DestDir: "{app}"; Flags: ignoreversion;
                                                        Source: "NVDA_License.txt"; DestDir: "{app}"; Flags: ignoreversion;

; Alte taskuri care sa apara, precum intrebarea daca se doreste crearea unei iconite pe Desktop:
[Tasks]
Name: desktopicon; Description: "Creare iconiţă pe Desktop "

; Sectiune apentru iconite:
                    [Icons]
Name: "{group}\Pontes Escape"; Filename: "{app}\Pontes Escape.exe"; IconFilename: "{app}\Pontes.ico"
; Randul urmator se refera la iconita de pe Desktop, i se atribuie acel task definit mai sus pentru a fi optionala:
Name: "{commondesktop}\Pontes Escape"; Filename: "{app}\Pontes Escape.exe"; IconFilename: "{app}\Pontes.ico"; Tasks: desktopicon
Name: "{group}\Ajutor Pontes Escape"; Filename: "{app}\Ajutor Pontes Escape.html"
Name: "{group}\Donaţie către Asociaţia Pontes"; Filename: "http://www.pontes.ro/ro/contact/donatie.php"
Name: "{group}\Site-ul Asociaţiei Pontes"; Filename: "http://www.pontes.ro/"
                                                                          Name: "{group}\Dezinstalare Pontes Escape"; Filename: "{uninstallexe}"

                                     ; Sectiunea care specifica ce sa se intample in momentul dezinstalarii:                                     
                                                                          [UninstallDelete]
; Am pus o singura linie care sa spuna sa fie sters folderul [app], chiar daca am pus in el altceva dupa instalare:
Type: filesandordirs; Name: "{app}\*"

; Sectiune care specifica ce sa se intample la instalare:
[InstallDelete]
; Am setat sa fie stearsa orice iconita de pe Desktop care incepe cu Pontes Escape
; Asta pentru ca poate apare un numar in plus, precum 1.1 si era 1.0:
Type: files; Name: "{commondesktop}\Pontes Escape*"
; Sa stearga folderul [app] daca era deja, asta pentru ca sunt pachete diferite in functie de limbi si nu vroiam sa ramana resturi daca cumva nu a fost dezinstalata o versiune anterioara:
Type: filesandordirs; Name: "{app}\*"
; Sa fie sters si grupul din Start Menu:
Type: files; Name: "{group}\*"

; Sectiune care specifica ce sa fie lansat in timpul sau dupa instalare:
[run]
; Check box pentru citirea fisierului ajutor inainte de Finish:
Filename: "{app}\Ajutor Pontes Escape.html"; Description: "Citeşte fişierul Ajutor Pontes Escape"; Flags: postinstall shellexec skipifsilent
; Check box care intreaba daca se doreste lansarea imediata dupa Finish a jocului:
                                                           Filename: "{app}\Pontes Escape.exe"; Description: "Lansează Pontes Escape"; Flags: postinstall nowait skipifsilent unchecked
Dupa cum se poate vedea, fiecare instructiune poate avea diferite flaguri, precum: daca e fisier read only "isreadonly", daca sa fie ignorat faptul ca mai este un fisier anterior cu acelasi nume "ignoreversion" si multe multe altele.
Pe langa flags se pot seta la fiecare instructiune care scrie fisier sau creaza iconita si permissions precum: "everyone_full".
In caz ca am setat mai multe limbi, si le-am denumit in sectiunea [Languages] ca "Romana", "English" si "Italiano", putem specifica la un rand de instructiune "languages: Italiano", astfel acea instructiune se va intampla doar daca a fost ales din combo box-ul de la inceput Italiano ca limba.
Inno Setup are fisiere pentru toate limbile.

Intr-o sectiune [Registry] se pot specifica unde si ce chei sa se puna, daca se doreste stergerea lor automata la dezinstalare, de asemenea permisiunile si altele.

Pentru a prelua o mie de fisiere cu extensia .JPG, putem folosi wildcards: "*.jpg" se refera la toate fisierele de acest tip.

Daca toate aceste setari care sunt de ordinul sutelor nu sunt suficiente pentru ca se doreste ceva si mai complex, precum cautarea in calculator a unui fisier x.txt, de existenta lui depinzand instalarea cu succes sau nu a programului sau a unei singure componente, putem scrie cod in Pascal, cod care poate fi inclus in pachetul de instalare pentru a fi executat pentru o anume instructiune.

manualul este de tip .CHM, deci usor de citit: cuprins in tree view.

In caz ca e cineva interesat, putem in topicul acesta sa vorbim despre setari mai avansate, sa mai dam exemple si altele.

Mie mi se pare o unealta excelenta, practic pastrezi fisierul .ISS pentru un program, i se pot aduce modificari ulterioare, oricand poate fi recreat pachetul de instalare cu optiunea Compile din meniul Run sau din meniul context al fisierului .ISS.

Re: Inno Setup, utilizare, un mic tutorial

Scris: 06 Oct 2013, 19:10
de IonPop
In general se pare ca principiul de functionare este asemanator cu cel din NullSoft Installer, doar cu alte denumiri de chei.
Sti cumva daca se poate inregistra un fisier dll in momentul instalarii si daca se poate de-inregisttra acel fisier .dll in momentul dezinstalarii programului?
Sti daca se poate rula un program din kitul de instalare in momentul instalarii, inainte de finalizarea instalarii?
Si daca se poate rula un program in momentul dezinstalarii?

De asemenea, daca in momentul dezinstalarii un fisier .dll este folosit de Windows (fiindca a fost inregistrat ca server ActiveX de exemplu), deci nu poate fi sters, se ofera o facilitate de a il redenumi sub un alt nume (fiindca asta se poate), si de a seta ca respectivul fisier sa fie sters la urmatoarea bootare?
Sau exista o alta metoda de a sterge fisierele blocate in momentul dezinstalarii?

Cu fisierul de configurare de mai sus se creaza un kit de instalare care instaleaza programul si sub Windows 32bit si sub Windows 64 bit?

Scris: 06 Oct 2013, 20:28
de Campus
Eu in ultima vreme folosesc Inno Script Studio pentru a crea installer-uri cu inno setup.
E un fel de interfata pentru inno setup care cel putin pe mine ma ajuta sa imi organizez mai bine scriptul de instalare. Nu stiu cat de accesibila este, stiu ca are scurtaturi de taste de exemplu ctrl+1 merge la sectiunea files, ctrl+2 la sectiunea directories, insert adauga un item nou la oricare sectiune si asa mai departe. Poti vedea oricand scriptul generat cu ctrl+0.
De exemplu pentru a adauga un fisier care sa se instaleze doar pe 64 bit in inno script studio dai ctrl+1 pentru a merge la files, alegi fisierul dai vreo 6 taburi pana ajungi la flags apoi cu control tab pana la conditional si apoi bifezi 64 bit.
Ideea e ca folosind unealta asta inveti mai usor limbajul folosit de inno setup.
Foarte util este si manualul de utilizare inno setup care este doar in engleza, din pacate si il gasesti la http://www.jrsoftware.org/ishelp/

Re: Inno Setup, utilizare, un mic tutorial

Scris: 07 Oct 2013, 00:52
de Manu
IonPop scrie: Sti cumva daca se poate inregistra un fisier dll in momentul instalarii si daca se poate de-inregisttra acel fisier .dll in momentul dezinstalarii programului?
Cu siguranta se pot inregistra fisiere DLL. Eu nu am avut nevoie, dar am vazut pe ici pe colo vorbindu-se despre asa ceva.
IonPop scrie: Sti daca se poate rula un program din kitul de instalare in momentul instalarii, inainte de finalizarea instalarii?
Si daca se poate rula un program in momentul dezinstalarii?
Cel putin in timpul instalarii se poate, la dezinstalare nu am vazut.
IonPop scrie: De asemenea, daca in momentul dezinstalarii un fisier .dll este folosit de Windows (fiindca a fost inregistrat ca server ActiveX de exemplu), deci nu poate fi sters, se ofera o facilitate de a il redenumi sub un alt nume (fiindca asta se poate), si de a seta ca respectivul fisier sa fie sters la urmatoarea bootare?
Sau exista o alta metoda de a sterge fisierele blocate in momentul dezinstalarii?
Exista posibilitatea ca fisierele blocate sa fie sterse la Windows Restart.
IonPop scrie: Cu fisierul de configurare de mai sus se creaza un kit de instalare care instaleaza programul si sub Windows 32bit si sub Windows 64 bit?
Da, merge pe ambele variante. Toate jocurile pe care le-am facut noi sunt compilate pe 32 si merg si pe 64. Mai mult, chiar si programele care scriu valori in registri merg si pe 32 si pe 64, fara sa fi specificat ceva anume. Are el grija sa isi dea seama ce varianta de Windows este si unde trebuie sa scrie valorile in functie de aceasta.

Nu stiu daca exista ceva care sa nu se poata, cel putin lucruri care trebuie in general pentru un installer.

Scris: 07 Oct 2013, 01:11
de Manu
Campus scrie:Eu in ultima vreme folosesc Inno Script Studio pentru a crea installer-uri cu inno setup.
Da, e chiar usor de creat cu acest Inno Script Studio un script Inno Setup, mai ales pentru cine nu a apucat sa se familiarizeze cu "limbajul"
Am vazut ca apare in acest studio la deschidere un Wizard care intreaba despre cam toate instructiunile necesare pentru crearea unui installer pentru un program, practic si cine nu are chef sa se familiarizeze cu scriptingul Inno Setup, cu diversele flaguri si tot felul de parametri, poate face un installer.

Cel putin aria de editare, wizard-ul de creare script nou sunt accesibile.
Nu stiu insa ce se intampla cand apas Control + 1 sau Control + 2, nu mai pot face nimic, trebuie sa inchid si sa redeschid programul si sa reincarc fisierul .ISS ca sa imi citeasca iar randurile de cod.

Scris: 07 Oct 2013, 08:42
de IonPop
O sa incerc si eu din nou InnoSetup fiindca pare a fi mai OK decat NullSoft Installerul.