Käyttäjän työkalut

Sivuston työkalut


ohjeet:windowsinstaller

Windows Installer

Windows Installer on Windowsin palvelu (service), joka huolehtii ohjelmien asentamisesta eli tiedostojen kopioinnista, rekisteriasetusten ja pikakuvakkeiden luomisesta, ohjelmien poistamisesta, korjaamisesta, asennuksen tai poistamisen peruuntumisesta (rollback) ja ylipäänsä kaikesta mahdollisesta mikä liittyy ohjelma-asennuksiin. Windows Installerin tarkoituksena on huolehtia, että tiedostot ja rekisteri pysyvät hyvässä ojennuksessa, mitään jo koneella olevaa ei vahingossa korvaudu asennuksessa eikä vastaavasti ohjelmaa poistettaessa mitään sellaista poisteta, mitä ei kuulukaan poistaa.

Windows Services

Windows Installer -palvelu on normaalisti pysähtyneenä ja se käynnistyy tarvittaessa eli aina silloin kun koneella on jotain ohjelma-asennuksiin liittyvää meneillään.

Windows Installer Service

Versiot

Windows Installerista on ollut useita eri versioita ja se on saatavana myös vanhoihin Windowseihin erikseen asennettavana komponenttina. Windows 2000, XP sekä Windows Server 2000 ja 2003 ovat aina pitäneet sisällään jonkin Windows Installerin version, joten Windows Installer on ollut jo useita vuosia Microsoftin virallinen tapa ohjelmien asentamiseen. Koneella olevan version voi selvittää käynnistämällä Windows Installerin komennolla msiexec.

Versio Tuetut käyttöjärjestelmät
1.0 Windows NT, 95, 98, 2000
1.1 Windows NT, 95, 98, 2000
1.11 Windows Server 2000
1.2 Windows NT, Me, 95, 98, 2000, 2000 Server
2.0 Windows NT, Me, 95, 98, 2000, XP, 2000 Server
3.0 Windows 2000, XP, 2000 Server, Server 2003
3.1 Windows 2000, XP, 2000 Server, Server 2003
4.0 Windows Vista, Server 2008
5.0 Windows 7, Server 2008 R2

Jos tarkemmat versionumerot jostain syystä kiinnostavat, niin ne löytyvät MSDN:n sivulta.

Windows Installer komentoriviltä

Windows Installeria käytetään komentoriviltä kutsumalla ohjelmaa msiexec.exe. Vanhat versiot antoivat virheilmoituksen, uudemmat avaavat ohjeikkunan, jossa kerrotaan msiexec:in ymmärtämät komentorivioptiot.

Msiexec.exe:n komentorivioptiot löytyvät myös esimerkiksi Microsoftin KB314881-artikkelissa.

MSI-paketit

Windows Installer ei ole kaikkiruokainen asennettavien ohjelmien suhteen. Itse asiassa se noudattaa hyvin tarkkaa dieettiä ja suostuu nielemään vain ja ainoastaan Windows Installerin omia asennuspaketteja, MSI-paketteja (.msi) tai Patch:eja (.msp), lisukkeiksi kelpaavat Windows Installer Transform:it (.mst).

MSI-paketin rakenne

MSI-paketti koostuu erillisistä streameista, kuten ”Summary information” ja ”Database”. Database on rakenteeltaan relaatiotietokanta, jossa on kuvattu koneen toivottu tila asennuksen jälkeen. MSI-paketti ei siis ole ”perinteinen” proseduraalinen asennusohjelma tai skriptattu asennus, vaan deklaratiivinen asennuksen määrittely. Windows Installerin tehtävänä on tulkita MSI-paketin sisältö ja huolehtia kaikista tarvittavista toimepiteistä, jotta MSI-paketissa kuvattuun lopputulokseen päädyttäisiin (tai siitä päästäisiin eroon ohjelmaa poistettaessa). Toimenpiteet pitävät sisällään muun muassa tarvittavien asennus- tai poistoskriptien luomisen ja ajamisen, järjestelmän eheydestä huolehtimisen ja vuorovaikutuksen käyttäjän kanssa.

MSI-paketin rakennetta voi kuvata seuraavasti.

  • Package
    • Product
      • Feature A
        • Component 1
          • File 1
        • Component 2
          • Registry Setting 1
      • Feature B
        • Component 3
          • File 2

Feature on ohjelman erillinen osanen, esimerkiksi MS Officessa Word tai Excel. Normaalisti ohjelmia uudelleenpaketoitaessa riittää yksi feature. Pienin Windows Installerin ”käsittelemä” yksikkö (”atomic unit”) ja myös MSI-paketin tärkein osanen, on component. Component:it pitävät sisällään esimerkiksi tiedostoja tai rekisteriasetuksia ja niiden muodostamiseen on varsin tarkat säännöt (Component Rules). Component-käsitteen ymmärtäminen on melkeinpä tärkein MSI-paketteihin ja Windows Installeriin liittyvä seikka.

Transformit, pätsit ja bootstrapperit

Transformit

Windows Installer Transform (.mst) on MSI-paketin kaltainen tiedosto, jossa on määritelty mitä muutoksia alkuperäiseen MSI-pakettiin halutaan asennettaessa tehdä. Transformissa määritellyt muutokset voidaan yhtä hyvin tehdä suoraan alkuperäiseen MSI-pakettiinkin, mutta useat eri transformit mahdollistavat helposti erilaiset asennukset

msiexec.exe /i Foo_1.0.0.msi TRANSFORMS=Foo_no-eula.mst
msiexec.exe /i Foo_1.0.0.msi TRANSFORMS=Foo_no-desktop-shortcut.mst
msiexec.exe /i Foo_1.0.0.msi TRANSFORMS=Foo_finnish.mst;Foo-no-desktop-shortcut.mst;Foo-no-eula.mst

Pätsit

Windows Installer Patch (.msp) on harvemmin käytetty ohjelmapäivityksen muoto. Kokonaan uuden MSI-paketin sijaan voidaan luoda .msp-tiedosto, joka päivittää alkuperäistä MSI-pakettia. Patchit asennetaan aina komentoriviltä ja patchin toimittajan tulisi antaa ohjeet sen käytöstä.

Bootstrapperit

Bootstrapperilla tarkoitetaan erillistä ajettavaa ohjelmaa, kuten setup.exe, joka toimii ikään kuin välikerroksena käyttäjän ja Windows Installerin välissä. Bootstrapperissa voidaan tehdä sellaisia toimenpiteitä, mitä ei haluta tai ei ole järkevää laittaa osaksi MSI-pakettia, kuten ohjelman asentamis- tai toimimisedellytyksien tarkastamisen ja tarvittavien käyttöjärjestelmän lisäosien tai apuohjelmien asentamisen (jotka voivat vallan hyvin olla MSI-paketteja nekin. Sisäkkäisten (nested) MSI-pakettien ajaminenhan on kiellettyä!).

Bootstrapperilla voidaan myöskin tarjota käyttäjäystävällinen liittymä ohjelman asentamiseen, jolloin bootstrapper-ohjelma ajaa ohjelman asentamiseen tai paikkaamiseen tarvittavan komentorivin. Bootstrapper voisi esimerkiksi ajaa käyttäjän puolesta ohjelman asentamiseksi komennon

msiexec /i program.msi SERIAL=1234ABCD TRANSFORMS=lang_finnish.mst

tai

msiexec /i program.msi SERIAL=EVALUATION TRANSFORMS=lang_swedish.mst

Saman toiminnallisuuden toteuttaminen ei pelkästään MSI-pakettia hiirellä klikaten onnistu.

Jotkin ohjelmistotoimittajat piilottavat MSI-paketin bootstrapperin sisään, josta se sitten puretaan ohjelmaa asentavalta käyttäjältä ”salaa” johonkin väliaikaiseen paikkaan, kuten %temp%-hakemistoon.

Bootstrapperit ovat ylläpitäjälle sikäli tarpeettomia, että niillä tehdään juuri se työ, mikä oikeastaan kuuluu järjestelmän ylläpitäjän tehtäviin. Bootstrapperin sisältämä logiikan ja toiminnallisuuden kuvaaminen pitäisi aina löytyä ohjelman asentamiseen liittyvästä dokumentaatiosta, mutta useimmitenhan tällaista tietoa ei ole kovinkaan helposti saatavilla.

Windows Installer -pikakuvake

Verrataanpa Notepadin ja Orcan pikakuvakkeita.

Huomaamme, että Notepadin kohdalla Target: osoittaa suoraan levyllä olevaan ajettavaan tiedostoon notepad.exe, mutta Orcan kohdalla Target: ei ole mikään tietty tiedosto, vaan asennettu ohjelma, Orca itsessään. Notepadin pikakuvake on ”perinteinen” Windowsin pikakuvake, Orcan pikakuvake taas Windows Installer -pikakuvake. Kun Notepadin pikakuvakkeesta käynnistyy ajettava ohjelma suoraan, niin Orcan pikakuvake käynnistääkin Windows Installerin, joka ensin vertaa koneella vallitsevaa tilannetta Windows Installer cachessa olevaan Orcan MSI-pakettiin, tarvittaessa korjaa ”rikkinäisen” asennuksen ja vasta sitten käynnistää ajettavan ohjelman.

Lisäksi Windows Installer -pikakuvakkeet mahdollistavat ”installation-on-demand” ja ”advertisement”-asennukset.

Advertised, Published ja Assingned -asennukset

Windows Installer, Group Policyt sekä muut ohjelmistojen jakelujärjestelmät mahdollistavat eri tyyppisiä ohjelmien asennusvaihtoehtoja.

  • Published”-asennuksessa ohjelma julkistetaan käyttäjien asennettavaksi Add/Remove Programs:in kautta, jolloin user-tason oikeudet riittävät ohjelman asentamiseen.
  • Advertised”-asennuksessa käyttäjälle taas luodaan valmiiksi ohjelman pikakuvakkeet, mutta ohjelma asennetaan vasta kun se käynnistetään ensimmäisen kerran.

Sekä ”published”- että ”advertised”-asennuksissa ohjelma voidaan myös määritellä asentumaan, kun käyttäjä esimerkiksi tuplaklikkaa tiedostoa, jonka tiedostopääte on ohjelman asennuspaketissa määritelty avattavaksi kyseisellä ohjelmalla. (Auto-Install)

  • Assigned”-asennuksessa ohjelma määritellään asentumaan joko tietyille
    • koneille, jolloin ohjelma asentuu bootin aikana ja on kaikkien koneen käyttäjien käytettävissä ilman että jokaisen tarvitsee asentaa ohjelmaa erikseen käyttöönsä tai
    • käyttäjille, jolloin ohjelma asentuu loginin aikana se on aina käyttäjän käytettävissä kaikilla koneilla

Installation-on-demand” tarkoittaa ohjelmien asentamattomien osien (Feature) lisäämistä ohjelman käytön aikana.

Windows Installer cache

Kun Windows Installer asentaa ohjelman MSI-paketista, se tallettaa koneen levylle asennuspaketista ”tyhjennetyn” (inflated) version, jossa on kaikki asennuksen logiikkaan ja eheyteen liittyvä tieto, mutta ei esimerkiksi MSI-paketin sisällä mahdollisesti olleita tiedostoja.

Per-Machine -asennuksissa MSI-cache löytyy hakemistosta %systemroot%\Installer. Cachessa olevien pakettien selailu Windows Explorerin kanssa tulee havainnollisemmaksi, kun asettaa Author ja Title -sarakkeet näkyville.

”%userprofile%\???\Installer”

Kuvake- ja mst-tiedostot tallentuvat hakemistoon

”%USERPROFILE%\Application Data\Microsoft\Installer\{ProductCode GUID}”

Install Source

Windows Installer säilyttää Windowsin rekisterissä myös tietoa siitä, mistä ohjelma on alunperin asennettu eli mistä polusta alkuperäinen MSI-paketti löytyy. CD- ja muiden siirreltävältä medialta tehtyjen asennusten kohdalla install sourcen takaa ei tietenkään löydy yhtään mitään ja jos MSI-paketti on tehty todella huonosti, voi ohjelman käynnistysyritys johtaa virheilmoitukseen ja ohjelman käyttö estyä. (Toki se .exe siellä jossain levyllä toimii).

Verkossa olevat MSI-paketit suositellaan yleisesti laitettavaksi DFS-jaon taakse ja MSI-paketteihin viitataan aina ainoastaan DFS-jaon kautta. Näin install source säilyy aina samana, vaikka tiedostoja kopioitaisiinkin levypalvelimelta toiselle ja install source on aina saatavilla. Tai no; ainakin silloin kun verkko toimii.

Tiedostojen lisääminen MSI-pakettiin

Esimerkit koskevat QuickTime.msi-pakettiin lisättäviä tiedostoja, mutta ovat yleispäteviä.

Cabinet-paketin luonti

Luo .ddf-tiedosto (Diamond Directive File), jossa luetellaan .cab-tiedoston sisältämät tiedostot:

.OPTION EXPLICIT
 
.Set CabinetNameTemplate=settings.CAB
 
.Set Cabinet=on
.Set Compress=on
 
"CopyConfig.vbs"
"QTPlayerSession.xml"
"QuickTime.qtp"

Kopioi .cab-tiedostoon tulevat tiedosto samaan hakemistoon luomasi .ddf-tiedoston kanssa ja aja makecab.exe /F init.ddf, joka luo tarvittavan settings.cab-tiedoston disk1-hakemistoon.

Transform-tiedoston muokkaus

  1. Avaa msi-tiedosto InstEd:llä, Orcalla tai muulla haluamallasi msi-muokkausohjelmalla.
  2. Luo uusi transform.
  3. Lisää Component-tauluun komponentti, johon uudet tiedosto liitetään:
    • Component-nimeksi haluamasi (esim. Settings)
    • ComponentId-kenttään arvo uusi GUID
    • Directory_-kenttään hakemisto, johon uudet tiedostot tulevat asennuksessa (esim. INSTALLDIR)
    • Attributes-kenttään laita 0x0000
    • Condition-kenttä voi jäädä tyhjäksi
    • KeyPath-kenttään jokin uusi tiedosto (esim. CopyConfig.vbs)
  4. Lisää Feature-tauluun seuraavat tiedot:
    • Feature-kenttään haluamasi nimi (esim. Settings)
    • Feature_Parent-kenttään jokin alkuperäisen .msi-paketin featureista
    • Title-, Description- ja Display-kentät voi jättää tyhjäksi
    • Level-kenttään arvo 1
    • Directory_-kenttään hakemisto, johon uudet tiedostot tulevat asennuksessa (esim. INSTALLDIR)
    • Attributes-kenttään arvo 0x0000
  5. Lisää Feature Components-tauluun tiedot edellisessä kohdassa lisäämästä komponentistasi:
    • Feature_-kenttään haluamasi nimi (esim. Settings)
    • Component_-kenttään edellisessä kohdassa nimeämäsi Component (esim. Settings)
  6. Lisää File-tauluun pakettiin lisättävät tiedostot (tiedostot pitää lisätä aakkosjärjestyksessä):
    • File-kenttään tiedostolle tunniste, joka voi olla sama kuin itse tiedoston nimi (esim. CopyConfig.vbs)
    • Component-kenttään kohdassa 3) valittu nimi (esim. Settings)
    • FileName-kenttään tiedoston asennusnimi sekä pitkässä että lyhyessä muodossa (esim. COPYC~1.VBS|CopyConfig.vbs)
    • FileSize-kenttään tiedoston pituus tavuina (esim. 3011)
    • Version- ja Language-kentät voi jättää tyhjiksi
    • Attributes-kenttään laitetaan arvo 0x4000
    • Sequence-kenttään seuraava vapaa arvo
  7. Lisää Media-kenttään cab-tiedoston tiedot:
    • DiskId-kenttään seuraava vapaana oleva arvo
    • LastSequence-kenttään suurin edellisessä kohdassa lisäämäsi Sequence-arvo
    • DiskPrompt-kentän voi jättää tyhjäksi
    • Cabinet-kenttään tekemäsi cab-tiedoston nimi (esim. settings.CAB)
    • VolumeLabel-kentän voi jättää tyhjäksi
    • Source-kenttään kyseisen cab-tiedoston sijainti. Kyseinen cab-tiedosto kannattaa säilyttää samassa hakemistossa itse msi-tiedoston kanssa, jolloin tähän kenttään voi laittaa pelkästään cab-tiedoston nimen (esim. settings.CAB)
  8. Tallenna .mst-tiedosto.
Restart Manager
ohjeet/windowsinstaller.txt · Viimeksi muutettu: 2018/05/03 14:14 / mikko