Megosztás a következőn keresztül:


Verzióadatok használata

A telepítési programok általában a következő célokat tűzik ki célul:

  • Fájlok elhelyezése a megfelelő helyen.
  • A felhasználó értesítése arról, hogy a telepítőprogram lecserél egy meglévő fájlt egy jelentősen eltérő verzióra – például egy német nyelvű fájl lecserélése egy angol nyelvű fájlra, vagy egy újabb fájl lecserélése egy régebbi fájlra.

A telepítőprogram írásakor az egyes fájlokhoz a következő adatoknak kell rendelkezniük:

  • A fájl neve és helye (más néven a forrásfájl).
  • A felhasználó merevlemezén található egyenértékű fájl neve (más néven célfájl). Ez a név általában megegyezik a telepítőlemez fájlnevével.
  • A fájl megosztási állapota, vagyis az, hogy a fájl privát-e a telepített alkalmazáshoz, vagy több alkalmazás is megosztható.

A telepítőprogram a VerFindFile függvénnyel állapíthatja meg, hogy a fájlt hová kell másolni a lemezen. Ez a függvény azt is megadhatja, hogy a fájl privát-e az alkalmazás számára, vagy megosztható. Ha probléma merül fel a fájl megkeresése során, VerFindFile hibaértéket ad vissza. Ha például a rendszer a célfájlt használja, VerFindFileVFF_FILEINUSEad vissza. A telepítőprogramnak értesítenie kell a felhasználót a problémáról, és válaszolnia kell a felhasználónak a telepítés folytatására vagy befejezésére vonatkozó döntésére.

A VerInstallFile függvény a forrásfájlt a VerFindFileáltal megadott könyvtárban lévő ideiglenes fájlba másolja. Ha szükséges, VerInstallFile kibontja a fájlt az adatbontási kódtárban található függvényekkel.

VerInstallFile összehasonlítja az ideiglenes fájl verzióadatait a célfájl verzióadataival. Ha a kettő eltér, VerInstallFile egy vagy több hibaértéket ad vissza. Például VIF_SRCOLD ad vissza, ha az ideiglenes fájl régebbi a célfájlnál, és VIF_DIFFLANG, ha a fájlok különböző nyelvi azonosítókkal vagy kódlapértékekkel rendelkeznek. A telepítőprogramnak értesítenie kell a felhasználót a problémáról, és válaszolnia kell a felhasználónak a telepítés folytatására vagy befejezésére vonatkozó döntésére.

Néhány VerInstallFile hiba helyreállítható. Vagyis a telepítőprogram újra meghívhatja a VerInstallFile, megadva a VIFF_FORCEINSTALL lehetőséget, hogy a verzióütközéstől függetlenül telepítse a fájlt. Ha VerInstallFileVIF_TEMPFILE ad vissza, és a felhasználó úgy dönt, hogy nem kényszeríti a telepítést, a telepítőprogramnak törölnie kell az ideiglenes fájlt.

VerInstallFile nem helyreállítható hibába ütközhet a telepítés kényszerítésekor, még akkor is, ha a hiba korábban nem létezett. A fájlt például zárolhatja egy másik felhasználó, mielőtt a telepítőprogram megkísérelte kényszeríteni a telepítést. Ha egy telepítőprogram nem helyreállítható hiba után próbálja kényszeríteni a telepítést, VerInstallFile meghiúsul. A telepítőprogramnak rutinokat kell tartalmaznia az ilyen típusú hibák elhárításához.

Az ajánlott megoldás egy párbeszédpanel megjelenítése a következő gombokkal: Telepítés, Kihagyás, és Mindent telepít. (Egy másik megoldás egy párbeszédpanel, amelyen a gombok Igen, Igen mindegyikre, Kihagyásés Mégsetalálhatóak.) Az Az összes telepítése gombnak meg kell akadályoznia, hogy a telepítőprogram a felhasználót hasonló hibák miatt kérdezze, ha a VIFF_FORCEINSTALL opciót a VerInstallFileminden további alkalmazásában is alkalmazza. Nem helyreállítható hibák esetén a Telepítés és a Az összes telepítése gombokat le kell tiltani.

Ha hasznos hibaüzenetet szeretne megjeleníteni a felhasználónak, a telepítőprogramnak általában le kell kérnie az ütköző fájlok verzióerőforrásaiból származó információkat. A telepítőprogram négy függvényt használhat erre a célra:

GetFileVersionInfoSize a verzióinformáció méretét adja vissza. GetFileVersionInfoGetFileVersionInfoSize által lekért adatokat használ a verzióinformációkat tartalmazó struktúra lekéréséhez. VerQueryValue egy adott tagot kér le ebből a struktúrából.

Ha például VerInstallFile a VIF_DIFFTYPE hibát adja vissza, a telepítőprogramnak a GetFileVersionInfoSize, GetFileVersionInfoés VerQueryValue függvényt kell használnia az ideiglenes és a célfájlokon az egyes fájlok általános típusának lekéréséhez. Ha a fájlok nyelvei ütköznek, a telepítőprogramnak a VerLanguageName használatával is le kell fordítania a bináris nyelvi azonosítót a nyelv szöveges ábrázolására. (Például 0x040C a "Francia" karakterláncra fordítja.)

Ha VerInstallFile fájlhibát ad vissza, például VIF_ACCESSVIOLATION, a telepítőprogramnak a GetLastError függvényt kell használnia a legutóbbi hibaérték lekéréséhez. A programnak le kell fordítania ezt az értéket egy informatív üzenetre, amely a felhasználó számára jelenik meg. A programnak nem szabad szabályoznia a VerInstallFile és GetLastErrorhívásait.