Käyttäjän työkalut

Sivuston työkalut


ohjeet:wix:upgrade

Pakettien upgrade-määrittelyt

UpgradeCode, ProductCode

Jokaiselle paketille tulee määritellä UpgradeCode (Product-elementissä). Vaikka pakettia ei koskaan päivitettäisi, UpgradeCode ei haittaa toimintaa mitenkään ja yllättävissä päivitystapauksissa pelastaa paljon. UpgradeCode on se, jolla ohjelman eri versiot tunnistavat toisensa. Tämän vuoksi UpgradeCoden tulisi olla sama jokaisessa versiossa.

ProductCode määrittelee mistä tuotteesta on kyse. Periaatteessa saman tuotteen eri versioiden pitäisi käyttää samaa ProductCodea, mutta Windows Installer ei tällöin osaa päivittää automaattisesti uudempaan versioon. Siksi onkin järkevämpää määritellä eri versioille eri ProductCodet ja käyttää vain UpgradeCodea eri versioiden tunnistukseen.

Upgrade-elementti

Jokaisessa versiossa pitäisi olla Upgrade-elementti määriteltynä. Myös ensimmäisessä versiossa. Upgrade-elementillä voidaan tällöin havaita kaksi asiaa:

  • Ohjelmasta on asennettuna vanhempi versio
  • Ohjelmasta on asennettuna uudempi versio

Vanhemman version havaitsemisen voi myöhemmin helposti lisätä myöhemmin tehtyihin paketteihin. Uudenmman version havaitseminen pitää olla ensimmäisestä paketista lähtien mukana.

Uudemman version havaitseminen

    <Upgrade Id='[upgradecode]'>
      <UpgradeVersion OnlyDetect='yes' Language='1033' IncludeMinimum='no'
		      Minimum='1.0.0' Property='NEWFOUND' />
    </Upgrade>

Minimum-komponentin versionumeron tulee olla sama kuin paketissa olevan ohjelman versionumero. Tällöin uudemmat versiot havaitaan ja NEWFOUND-property asetetaan. NEWFOUND-property voidaan tämän jälkeen havaita ja estää ohjelman asentuminen. Upgrade-elementissä Id-kenttä sisältää saman GUIDin kuin Product-elementissä UpgradeCode-kenttä (joka on siis sama joka versiossa tästä ohjelmasta).

Vanhemman version havaitseminen

    <Upgrade Id='[upgradecode]'>
      <UpgradeVersion OnlyDetect='no' Language='1033' IgnoreRemoveFailure='no'
		      IncludeMinimum='yes' Minimum='1.0.0' IncludeMaximum='no'
		      Maximum='1.2.0' Property='OLDFOUND' />
    </Upgrade>

Tässä esimerkissä kuvitteellisen paketin versionumero on 1.2.0. Kaikki versiot välillä 1.0.0 - 1.2.0 havaitaan ja OLDFOUND-property asetetaan. Tämän perusteella voidaan myöhemmin esittää dialogi vanhemmista versiota ja poistaa ne.

Minimum ja Maximum -kentät tukevat vain kolmea ensimmäistä versionumeroa, vaikka Windows Installer muuten tukee neljää versionumeroa. 1.5.0.2 ja 1.5.0.3 ovat siis Windows Installerin mielestä samaa versiota Upgraden kannalta (tulee vastaan mm. Mozilla-tuotteissa).

Vanhan version poistaminen

    <InstallExecuteSequence>
      <RemoveExistingProducts Before='InstallInitialize'>OLDFOUND</RemoveExistingProducts>
    </InstallExecuteSequence>

Vanha versio poistetaan vaiheessa RemoveExistingProducts. Koko vaihetta on turha suorittaa, jos vanhoja versioita ei löydetty, joten sen voi jättää ehdolliseksi OLDFOUND-propertystä. Windows Installerissa on tarkkaan määritelty, missä vaiheessa muista versioita saa poistaa. Käytännössä poisto tulee tehdä joko ennen paketin sisältämän ohjelman asennusta tai sen jälkeen. Yleensä päivitettäessä on järkevää poistaa ensin vanha versio ja sitten asentaa uusi, siksi teemme sen juuri ennen asennuksen alkua määrittelemällä Before='InstallInitialize'.

Käyttäjän valinta

Kaikki tämä tapahtuu täysin automaattisesti: vanhan version havaitseminen ja poistaminen, sekä uuden version asentaminen. Tämä on periaatteessa hieno asia, paitsi jos käyttäjä on epähuomiossa kliksauttanut pakettia, eikä oikeasti halua päivittää. Parasta on tällöin kysyä käyttäjältä haluaako hän jatkaa asennusta. Helpoiten tämä onnistuu ottamalla ui-utu-paketti käyttöön ja kutsumalla sieltä dialogia:

    <InstallUISequence>
      <Show Dialog='UI_Updateprompt' Sequence='202'>OLDFOUND</Show>
    </InstallUISequence>

Varoituksen sananen

Vaikka tekisi nämä kaikki asetukset pakettiin, on silti oltava varovainen. Jos vanha paketti on asennettu per-machine asennuksena ja uusi paketti asennetaan per-user asennuksena (tai päinvastoin), Windows Installer kyllä havaitsee, että asennetaan jo olevasta paketista uutta versiota, mutta ei tee asialle mitään. On siis mahdollista asentaa koneelle saman ohjelman eri versiot ja saada luultavasti pakettien self-repair -toiminnot korjaamaan omaa versiotaan riippuen käyttäjästä.

ohjeet/wix/upgrade.txt · Viimeksi muutettu: 2014/11/20 15:01 / 127.0.0.1