Kreiranje instalacijskog programa za paketne skripte na Windowsu: Potpuni vodič

  • Tiha instalacija sa batch: logovi, .exe/.msi i CAB ekspanzija.
  • Orkestracija obezbjeđivanja: komandna linija i komandne datoteke.
  • Prečice i dodaci: Izvršavanje 7-Zip-a, VBScript-a i PowerShell-a.
  • Inno Setup alternativa: Zavisnosti i upravljanje uslugama

Vodič za kreiranje instalatora pomoću batch skripte

Kreiranje vlastitog instalacijskog programa u Windowsu pomoću batch datoteke je pristupačnije nego što se čini, a uz pažljivo korištenje metodologije može biti i vrlo robusno. Ključno je kombinirati tihe batch skripte, pakiranje resursa i jasnu orkestraciju. kako bi se osiguralo da ništa ne bude prepušteno slučaju tokom instalacije.

Kada govorimo o "serijskom instaleru", mislimo na skriptu. .bat ili .cmd (ili čak Bash skripte na Windowsu (WSL)) koji automatizira zadatke implementacije: kopiranje i raspakiranje datoteka, pozivanje tihih instalatora, snimanje logova, kreiranje prečica ili servisa itd. Cilj je da se instalacija dogodi bez interakcije korisnika i na način koji se može ponavljati.

Priprema resursa i njihovo pakovanje u CAB

Prije nego što napišete i jedan redak teksta, dobra je ideja organizirati svoje materijale: objedinjuje svu imovinu na jednoj poznatoj lokaciji i odlučite hoćete li ih poslati kakve jesu ili u paketu. Ako odaberete kopiranje datoteka "sirovo", provjerite ima li svaka datoteka jedinstveno ime, jer Na odredištu obično slete u isti privremeni direktorij i preklapanja (install.exe, setup.exe, itd.) su česta.

Da bi se izbjegli sukobi, najpraktičnije je replicirati struktura foldera po aplikaciji I, ako želite, "povezujte" resurse kao kompletnu hijerarhiju. Na ovaj način možete proširiti uređeno stablo na uređaju baš onako kako ste ga pripremili, minimizirajući konfuziju oko imenovanja.

Ako prenosite mnogo datoteka, njihovo pakovanje u CAB datoteku olakšava slanje i kasnije proširenje. Da biste to uradili, kreirajte DDF (MakeCAB Descriptor) datoteku sa vašim direktivama i listom datoteka ili foldera koje treba uključiti. Definirajte parametre kao što su izlazni direktorij, tip kompresije i veličina mape, a na kraj unesite putanje datoteka koje želite zapakirati.

Pakovanje se generiše pomoću izvornog Windows uslužnog programa: MakeCABTipičan poziv bi mogao biti nešto poput makecab -f Ruta\a\tu_archivo.ddf, i generirat će .cab datoteku u navedenom direktoriju. Ne zaboravite provjeriti sadržaj testom proširenja. u čistom okruženju prije nego što ga integrišete u skriptu.

Instalacijski program za pakete s Windowsom

Grupno skriptiranje: Instalacija i registracija

Zapisivanje onoga što se dešava tokom instalacije je ključno. Iako se "engine" ne zapisuje sam, možete ga ugraditi u svoj skript kreiranjem datoteke zapisnika na sistemskom disku i preusmjeravanje standardnog izlaza i greške u tu datoteku. Nešto poput echo i operatera >> uradiće ostalo.

Za instalatere .exe koji podržavaju tihi način rada, možete pokrenuti instalaciju s odgovarajućim parametrom (na primjer, /S ili ekvivalent od dobavljača) i ispišite rezultat i povratni kod (%ERRORLEVEL%) u dnevnik. Na ovaj način ćete znati je li sve prošlo dobro bez potrebe za grafičkim interfejsom.

S instalaterima .M: Da koristi se msiexecUobičajeni obrazac je msiexec /i TuInstalador.msi /quiet (o /qn), kako bi se ispunio zahtjev apsolutne tišine kada se skripta pokreće iz paketa za pružanje usluga. Zabilježite izlazni kod je podjednako preporučljivo.

Ako vaše binarne datoteke putuju komprimovane u .cab formatu, možete proširite ih prije instalacije naredbom expand. Na primjer, expand -r tus_activos.cab -F:* . izdvaja sve u radni direktorij, a zatim vam omogućava pokretanje odgovarajuće naredbe. setup.exe ili slično bez punih ruta.

Pokretanje PowerShella iz batch-a sa sistemskim kontekstom

Neki zadaci konfiguracije zahtijevaju PowerShell i povišene privilegije. U tim slučajevima možete pozvati .ps1 skripta iz vašeg .bat fajla korištenje alata poput PsExec-a za prisilno aktiviranje sistemskog konteksta bez interakcije. Ideja je izvršiti nešto poput: prihvatiti EULA ugovor, pokrenuti cmd.exe /c powershell.exe sa scenarijem i preusmjeri sav izlaz u dnevnik koju ste koristili.

Imajte na umu da svaka skripta uključena u paket za pružanje usluga mora biti potpuno tihNema promptova, nema prozora, nema korisničkih zahtjeva. Ovo se odnosi i na PowerShell: dobro parametrizirajte svoje skripte, rješavajte greške i nikada se ne oslanjajte na ručni unos.

Grupne skripte za tihe instalacije

Orkestriranje više skripti unutar paketa

Iako mehanizam za obezbjeđivanje Windowsa podržava samo jednu komandnu liniju po paketuNišta ne sprječava ovu naredbu da pozove orkestracijski skript (.bat) koji zatim sekvencijalno poziva druge skripte ili instalatore. Ovo je kanonski način za instaliranje više aplikacija ili izvođenje prethodnih/naknadnih koraka na uređen način.

U konfiguraciji paketa, deklarira se komandna linija koja poziva orkestrator, a datoteke koje će koristiti navedene su kao "aktivne" (sam .bat, pomoćne skripte, instalacijski programi, .cab, itd.). Na taj način, kada instalirate paket, svi resursi će biti smješteni u istu privremenu mapu. i orkestrator ih može referencirati bez apsolutnih putanja.

konfiguracija Primjer vrijednosti Šta radi
Naredbe za obezbjeđivanje/Kontekst uređaja/Komandna linija cmd /c MiOrquestador.bat Poziva orkestarski skript koji upravlja cijelim objektom.
Naredbe za obezbjeđivanje/Kontekst uređaja/Datoteke naredbi MyOrchestrator.bat Glavna skripta koja registruje i poziva instalatore i ostale akcije.
Naredbe za obezbjeđivanje/Kontekst uređaja/Datoteke naredbi Referencirane skripte i binarne datoteke Dodatna sredstva: .ps1, .exe, .msi, .cab, itd., koje koristi orkestrator.

Windows Provisioning: Gdje se pokreće i ograničenja

Kada dodate paket za obezbjeđivanje pri prvom pokretanju, skripte se pokreću vrlo rano pri pokretanju, prije nego što postoji korisnički kontekstTo znači dvije stvari: sve mora raditi tiho, a odabrani instalateri moraju podržavati ovu ranu fazu sistema.

Datoteke deklarirane kao CommandFile kopiraju se u namjensku privremenu mapu po paketu. Za pakete primijenjene u integriranom iskustvu, uobičajeni obrazac je nešto poput %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\{PackageGuid}\Commands\0. To "0" označava redoslijed vrijeme izvršavanja (prva aplikacija) i povećava se za sljedeće.

Ako se paket instalira dvostrukim klikom na već korišteni računar, resursi će se nalaziti na privremena mapa korisnika koji pokreće instalaciju: %TMP%\ProvisioningPkgTmp\{PackageGuid}\Commands\0Radni direktorij prilikom pokretanja komandne linije bit će upravo ta mapa, tako da možete koristiti relativne putanje u vašim skriptama.

Važna ograničenja za ProvisioningCommands: Nije dozvoljeno ponavljanje naredbi u konzoli, prikazivanje korisničkog interfejsa, dijaloga ili čarobnjaka. Ako skripta prekrši ova pravila, može uzrokovati nedefinirano ponašanje. pa čak i učiniti računar neupotrebljivim; u ovom slučaju, jedina preostala opcija bi bila da ga vratite u prvobitno stanje koristeći opcije za oporavak sistema.

Komponenta za obezbjeđivanje pokušava pokrenuti skripte što je prije moguće na osnovu faze u kojoj je paket dodan. Na primjer, ako je dodan tokom ekspresne konfiguracije, pokrenut će se odmah nakon nanošenja paketa, dok se koraci za tu konfiguraciju nastavljaju. Na postojećim sistemima instaliranim dvostrukim klikom, nema obavještenja da su izvršne datoteke za obezbjeđivanje završene.

Pokretanje prilagođenih skripti nakon instaliranja drajvera (Visual Studio)

Ako razvijate drajvere i koristite Visual Studio, možete pokrenite vlastite komandne skripte nakon instalacije paketa upravljačkih programa na testnom računaru. Ovo se konfiguriše u Svojstvima projekta paketa.

Postupak je jednostavan: otvorite Svojstva projekta kontrolera, idite na Konfiguracija kontrolera → Raspoređivanje, označite "Omogući implementaciju" i odaberite testni tim. Tamo možete definirati "Prilagođena komandna linija" sa skriptom koja će se izvršiti nakon završetka instalacije.

Osim toga, u "Dodatne datoteke" možete uključiti samu skriptu i sve ostale instalacijske materijale koje želite kopirati na udaljeni računar. Ove datoteke se kopiraju u %SystemDrive%\drivertest\drivers od testnog tima, odakle ih možete pozvati s relativnim putanjama.

To je praktičan način za automatizaciju koraka nakon instalacije drajvera: registracije, validacija, provjere okolineitd., štedeći vrijeme u svakom ciklusu izgradnje i implementacije tokom razvoja.

Inno Setup kao alternativa (ili dodatak) batch konfiguraciji

Ako vam je potreban potpuni grafički instalacijski program, Inno Setup je vrlo moćno besplatno rješenje koje radi od Windowsa 9x do Windowsa 10/11 i podržava... 64-bitne instalacije i dubinsko prilagođavanjeNjegova jezgra je skripta (.iss) u kojoj definirate metapodatke, datoteke koje treba uključiti, radnje tokom instalacije i deinstalacije, jezike itd.

Tipičan skript deklariše konstante sa #define za naziv aplikacije, verziju, izdavača, URL, glavnu izvršnu datoteku, naziv usluge, mapu izdanja i instalacijski direktorij. Također prilagođava stil i kompresiju čarobnjaka. čvrsta LZMA, administratorske privilegije i aktivirajte instalaciju u 64-bitnom režimu sa ArchitecturesInstallIn64BitMode=x64.

Kritična tačka je ID aplikacije (GUID): mora biti jedinstven po aplikaciji. Generirajte novi (Inno alat: Alati → Generiraj GUID). Ako ga reciklirate između različitih projekata, instalacijski program će tretirati vašu aplikaciju kao da je ista i na kraju će ga "ažurirati" umjesto da ga instalira zasebno.

Da biste kopirali svoju aplikaciju, koristite odjeljak koji pokazuje na objavljenu mapu. Važno je ostaviti džoker na kraju, nešto poput PublishFolder=...\publish\*, tako da instalater uključi sve datoteke i podmape potrebno, a neke možete isključiti (na primjer, conf.xml) ako vam nije zgodno da ga distribuirate.

Inno Setup vam omogućava da provjerite i instalirate zavisnosti. Sa odgovarajućom bibliotekom (npr. CodeDependencies.iss) možete pozvati funkciju stila Dependency_AddDotNet60Desktop para provjerite ili instalirajte .NET 6 DesktopOsim toga, možete priložiti netcorecheck_x64.exe u vaš paket radi daljnjih provjera.

Za Windows servise, u i možete koristiti %SystemRoot%\System32\sc.exe para zaustavi, izbriši, kreiraj i pokreni servis tokom instalacije i deinstalacije. Tipičan obrazac je "zaustaviti i ukloniti" prije kreiranja, kako bi se izbjegli ostaci iz prethodnih verzija, a zatim pokrenite uslugu novoinstalirano tiho.

Ostali korisni detalji: dodajte jezike (npr. engleski, španski, katalonski, francuski, portugalski), kreirajte prečice u programsku grupu i kompajlirajte sa Build → Compile. Da biste validirali instalacijski program, otvorite izlaznu mapu (Build → Open Output Folder) i testirajte tok u virtualna mašina kako ne biste dodirnuli svoju glavnu opremu.

Sa pedantnim dizajnom (uredni resursi, opciono CAB pakovanje, tiho izvršavanje, korisni logovi, razumna orkestracija i, ako je primjenjivo, Inno Setup instalacijski program sa .NET 6 provjerom i upravljanjem uslugama), Moguće je izgraditi solidan i ponovljiv instalater sa batch-om koji se prilagođava i brzom implementaciji i složenim potrebama u Windows okruženjima.

Vezani članak:
Višenamjenski program za Windows aplikacije