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 Installer -palvelu on normaalisti pysähtyneenä ja se käynnistyy tarvittaessa eli aina silloin kun koneella on jotain ohjelma-asennuksiin liittyvää meneillään.
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 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.
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-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.
File 1
Registry Setting 1
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.
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
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ä.
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.
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.
Windows Installer, Group Policyt sekä muut ohjelmistojen jakelujärjestelmät mahdollistavat eri tyyppisiä ohjelmien asennusvaihtoehtoja.
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)
”Installation-on-demand” tarkoittaa ohjelmien asentamattomien osien (Feature) lisäämistä ohjelman käytön aikana.
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}”
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.
Esimerkit koskevat QuickTime.msi-pakettiin lisättäviä tiedostoja, mutta ovat yleispäteviä.
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.