Computerra instalator în asamblare

Crearea unui instalator simplu în asamblare

Într-unul dintre articole am considerat crearea programului de instalare (setup.exe) folosind programul InstallShield. Da, chiar și versiunea Express a programului InstallShield permite o perioadă relativ scurtă de timp pentru a crea un program flexibil de instalare. Când utilizați InstallShield, veți avea nevoie de mai mult timp pentru a compune compoziția fiecărui grup de programe decât pentru a crea programul de instalare propriu-zis.







Dar dacă trebuie să scriem un program de instalare simplu pentru programul nostru mic? Nu avem nevoie de diferite tipuri de instalare (tipice, compacte sau personalizate), programul nostru nu utilizează BDE, avem doar trei fișiere: programul în sine, fișierul de date și fișierul de ajutor. Este recomandabil să utilizați InstallShield pentru acest scop? Cred că nu.

Puteți utiliza fișierele de instalare Windows pentru a instala programe mici. Ați instalat vreodată un driver pentru dispozitiv? Pentru a adăuga un dispozitiv nou, expertul Definiție dispozitiv solicită un fișier .inf care conține toate informațiile despre driver: numele dispozitivului, tipul acestuia, versiunea driverului, fișierele necesare și informațiile pe care doriți să le adăugați în registrul Windows. Putem scrie același fișier INF care va instala programul nostru. Va fi nevoie de câteva minute pentru a crea acest fișier, mai ales că puteți folosi exemplul de mai jos - doar înlocuiți propriile valori.

Fișierele INF de instalare (informații pentru instalare) sunt foarte asemănătoare cu fișierele INI. Acestea constau în secțiuni care descriu acțiunile care trebuie luate la instalarea și dezinstalarea programului, precum și o listă a fișierelor care urmează să fie instalate.

Deci, să începem în ordine. Pentru definiteness, să spunem că avem nevoie pentru a seta base.exe programului în directorul C: \ Program Files \ de bază, copiați și fișierele base.hlp base.txt în directorul C: \ Program Files \ Baza \ Help, creați un program pentru un grup de program pe meniu Windows și, de asemenea, a pus informații despre program în registrul Windows, astfel încât să poată fi eliminat prin instrumentele standard Windows. Desigur, numele directoarelor pot fi schimbate.

În primul rând, vom determina tipul de instalare (vom avea unul - cel de bază). Creați un fișier numit base.inf (numele fișierului nu trebuie să fie același cu numele programului - am folosit numele base.exe și base.inf pentru claritate) și adăugați următoarele linii la acesta.

În secțiunea Versiune, definim clasa de semnătură și instalare - $ CHICAGO $ și BASE, respectiv. Nu trebuie să schimbi nimic aici. În secțiunea a doua a șirurilor, definim constante care vor fi disponibile în fișierul .inf. Aici veți avea ceva de schimbat. Toate aceste variabile vor fi utilizate în întregul fișier .inf. Secțiunea Strings este rezervată și nu poate fi apelată diferit. Această secțiune nu trebuie să fie la începutul fișierului - îl puteți scrie în mijloc, cel puțin în cele din urmă.

Apoi, determinați numărul de discuri de instalare, numele acestora, precum și o listă de fișiere:

Utilizatorul va vedea numele unității când instalatorul cere să instalați un alt disc. Nu am folosit numele discurilor (discul # 1 scrie de obicei discul # N, dar avem doar un disc), astfel că utilizatorul va vedea numai numele programului (% BASE%):

Computerra instalator în asamblare

Puteți scrie acest lucru (dacă aveți două sau mai multe discuri):

Notă. Trebuie să reținem că secțiunea SourceDisksFiles este opțională (în cazul în care un disc este un disc de instalare, dar este foarte de dorit - astfel încât sistemul va ști imediat ce fișier lipsește).

De obicei, imaginea descrisă în figura 1, utilizatorul nu ar trebui să vadă dacă aveți doar un disc. Pentru a face o fotografie a acestei ferestre, a trebuit să șterg fișierul base.txt, pe care îl solicită programul.

Acum definiți grupurile de instalare. Avem doar unul - DefaultInstall (instalare tipică):







O dată, pentru a nu uita, vom descrie acțiunile de eliminare a programului. Ce am făcut? Fișiere copiate, grupuri adăugate și informații în registru. Deci, pentru a dezinstala tot ceea ce trebuie să fie eliminat, le spunem instalatorului în secțiunea DefaultUninstall:

Am spus instalatorului că dorim să instalăm grupurile Main.Files (conține fișierul exe), Help.Files (fișiere base.hlp și base.txt) și Inf.Files (base.inf). De ce trebuie să instalăm un fișier .inf? Pentru ca Windows să știe ce să facă pentru a elimina programul. La urma urmei, ar trebui să citească secțiunea DefaultUnInstall și unde o citește, dacă nu instalăm fișierul INF?

Să ne întoarcem la programul de instalare: știe care grupuri de fișiere trebuie instalate, dar nu știe exact unde (:)). Am uitat să specificăm directoarele de destinație. Să corectăm:

Grup Main.Files va fi instalat în% directorul% basedir (C: \ Program Files \ Base), un grup Help.Files - în% basedir% \% HELPDIR% (C: \ Program Files \ Baza \ Help) și INF-fișier trebuie să instalați în director \ INF (de obicei C: \ WINDOWS \ INF). Toate cataloagele de sistem WINDOWS sunt numerotate: 17 este directorul INF, 18 este HELP, 10 este WINDIR și așa mai departe.

Următorul nivel de clarificare este indicația directă a fișierelor care sunt incluse în grupurile Main.Files, Help.Files și Inf.Files:

Rețineți că numele grupurilor de fișiere trebuie să se potrivească cu numele secțiunilor. Același lucru este valabil și pentru informațiile despre adăugarea de informații în registru.

Acum specificăm informațiile pe care dorim să le adăugăm în registru:
; Informații adăugate în registru
[Base.Registry]
HKLM,% REGKEY%.
HKLM,% REGKEY%, DisplayName ,,% BASE%
; C: \ WINDOWS \ rundll.exe setupx.dll, InstallHinfSection ImplicitUninstall 4 C: \ WINDOWS \ INF \ base.inf
HKLM,% regkey%, UninstallString ,, "% 10% \ rundll.exe setupx.dll, InstallHinfSection DefaultUninstall 4% 17% \ base.inf"
HKCU,% SOFTKEY%.
HKCU,% SOFTKEY%, Config ,,

În primul rând, vom adăuga% regkey% în HKLM (HKEY_LOCAL_MACHINE), apoi% în HKCU% tasta programabila (HKEY_CURRENT_USER). rând
HKLM,% regkey%, UninstallString ,, "% 10% \ rundll.exe setupx.dll, InstallHinfSection DefaultUninstall 4% 17% \ base.inf"

va fi înlocuit cu linia:
C: \ WINDOWS \ rundll.exe setupx.dll, InstallHinfSection ImplicitUninstall 4 C: \ WINDOWS \ INF \ base.inf

Comanda InstallHinfSection specifică secțiunea din fișierul% 17% \ base.inf "care trebuie citită pentru a elimina programul - DefaultUninstall.

Informațiile adăugate în registru vor fi utilizate nu numai pentru a elimina programul, ci și pentru a fi afișate în lista de programe instalate:

Computerra instalator în asamblare

Acum, descrieți pașii pentru crearea grupului de programe DHSI Labs și ștergerea acestuia: [Groups.Add]
setup.ini, progman.groups ,, "groupx = .HSILABS%"
setup.ini, groupx, "% BASE%", "% 24% \ Progra

[Groups.Del]
setup.ini, progman.groups ,, "groupx = .HSILABS%"
setup.ini, groupx ,,% BASE%

Se va crea un grup DHSI Labs și o comandă rapidă BASE (% BASE%). Way - ""% 24% \ Progra

1 \ Base \ base.exe "", director de lucru ""% 24% \ Progra

1 \ Base "", descrierea .ESC% ".

Asta e tot. Dacă nu pentru un singur DAR: acțiunea implicită pentru fișierele INF este de a le edita în Notepad. Pentru a instala, faceți clic dreapta pe fișier și selectați "Install". Încercați să explicați acest lucru unui utilizator care a fost folosit pentru a executa SETUP.EXE toată viața sa.

Trebuie să scriem acest foarte SETUP.EXE, care va lansa instalarea programului. Acest lucru se poate face pe Delphi (sau CBuilde sau folosind orice altă limbă), dar apoi este mai ușor de utilizat InastallShield - cel mai simplu program pe Delphi va cântări aproximativ 300K. Se pare că scopul nu justifică mijloacele. Acum vom avea nevoie de același Assembler, care apare în titlul articolului. Ești prea leneș pentru a scrie două sute de linii pentru a rula funcția API în asamblare? Ați greșit nu 200, ci doar 18, fără a lua în considerare liniile goale:

Textul programului este atât de transparent încât nu are nevoie de o explicație. În plus, în plus față de acest fișier, avem nevoie de câțiva alții: fișierul de resurse (RC), fișierul de definiție (DEF) și Makefile, care descriu pașii pentru construirea programului. Nu puteți folosi Makefile, dar executați comenzile în manual, dar cu Makefil este mult mai convenabil.

Mai întâi, creați un fișier de resurse (install.rc):

Cred că nu este necesar să explici în mod specific ce este și ce - înlocuiți doar parametrii de care aveți nevoie. Fișierul Install.def:

Ultimul fișier este install.mk (sau doar Makefile):
!dacă $ d (MAKEDIR)
IM = $ (MAKEDIR) \ .. \ lib \ import32
!altfel
IM = import32
!endif

install.exe: install.obj install.res
tlink32 / x / Tpe / aa / c / V4.0 instala.obj. $ (IM), install.def, install.res
ștergeți install.obj
ștergeți install.res

install.obj: install.asm
tasm32 / m / ml / q install.asm

install.res: install.rc
brc32 -r install.rc

Pentru a construi toate acestea aveți nevoie de tasm32 (Borland TASM5). Pentru a construi, mergeți la directorul unde sunt localizate toate fișierele și tastați:

dacă ați creat un fișier numit Makefile, nu install.mk.

Ca rezultat, a fost obținut fișierul INSTALL.EXE cu o greutate de 6 144 (6 KB!). Dacă scrieți același fișier mic pe Delphi sau CBuilder, îmi spăl mâinile.

Puteți pune o întrebare perfect legitimă: atunci când creați un instalator utilizând InstallShield, toate fișierele de instalare sunt împachetate, ce ar trebui să fac aici? Și cine vă împiedică să creați un fișier ZIP, să îl despachetați folosind Asm (executați o altă comandă - lansați unzip) și apoi să instalați programul? Desigur, dacă programul dvs. nu se potrivește pe o singură dischetă chiar și în arhivă, vor exista anumite dificultăți, dar atunci sunteți deja în afara scopului sarcinii - trebuie să creați un program de instalare pentru un mic program. Puteți, bineînțeles, să instalați BDE folosind principiul de mai sus, dar este meritat?







Trimiteți-le prietenilor: