Dela via


Använda versionsinformation

Ett installationsprogram har vanligtvis följande mål:

  • För att placera filer på rätt plats.
  • Meddela användaren om installationsprogrammet ersätter en befintlig fil med en version som skiljer sig avsevärt, till exempel genom att ersätta en tyskspråkig fil med en engelskspråkig fil eller ersätta en nyare fil med en äldre fil.

När du skriver installationsprogrammet måste du ha följande information för varje fil:

  • Namnet och platsen för filen (kallas för källfilen).
  • Namnet på motsvarande fil på användarens hårddisk (kallas målfilen). Det här namnet är vanligtvis samma som filnamnet på installationsdisken.
  • Delningsstatus för filen, det vill: om filen är privat för programmet som installeras eller kan delas av flera program.

Installationsprogrammet kan använda funktionen VerFindFile för att avgöra var filen ska kopieras på disken. Den här funktionen kan också användas för att ange om filen är privat för programmet eller kan delas. Om det uppstår ett problem med att hitta filen returnerar VerFindFile ett felvärde. Om systemet till exempel använder målfilen returnerar VerFindFileVFF_FILEINUSE. Installationsprogrammet måste meddela användaren om problemet och svara på användarens beslut att fortsätta eller avsluta installationen.

Funktionen VerInstallFile kopierar källfilen till en temporär fil i katalogen som anges av VerFindFile. Om det behövs expanderar VerInstallFile filen med hjälp av funktionerna i datadekomprimeringsbiblioteket.

VerInstallFile jämför versionsinformationen för den temporära filen med målfilens. Om de två skiljer sig åt returnerar VerInstallFile ett eller flera felvärden. Den returnerar till exempel VIF_SRCOLD om den temporära filen är äldre än målfilen och VIF_DIFFLANG om filerna har olika språkidentifierare eller kodsidevärden. Installationsprogrammet måste meddela användaren om problemet och svara på användarens beslut att fortsätta eller avsluta installationen.

Vissa VerInstallFile- fel kan återställas. Det innebär att installationsprogrammet kan anropa VerInstallFile igen och ange alternativet VIFF_FORCEINSTALL för att installera filen oavsett versionskonflikten. Om VerInstallFile returnerar VIF_TEMPFILE och användaren väljer att inte tvinga installationen, bör installationsprogrammet ta bort den temporära filen.

VerInstallFile kan stöta på ett oåterkalleligt fel vid försök att framtvinga installation, även om felet inte fanns tidigare. Filen kan till exempel låsas av en annan användare innan installationsprogrammet försöker tvinga fram installationen. Om ett installationsprogram försöker framtvinga installationen efter ett fel som inte kan återställas misslyckas VerInstallFile. Installationsprogrammet måste innehålla rutiner för att återställa från den här typen av fel.

Den rekommenderade lösningen är att visa en dialogruta med knapparna Installera, Hoppa överoch Installera alla. (En annan lösning är en dialogruta med knapparna Ja, Ja till Alla, Hoppa överoch Avbryt.) Knappen Installera alla bör förhindra att installationsprogrammet frågar användaren om liknande fel genom att inkludera alternativet VIFF_FORCEINSTALL i alla efterföljande användningar av VerInstallFile. För fel som inte kan återställas bör knapparna Installera och Installera alla inaktiveras.

Om du vill visa ett användbart felmeddelande för användaren måste installationsprogrammet vanligtvis hämta information från versionsresurserna för de filer som är i konflikt. Det finns fyra funktioner som installationsprogrammet kan använda för detta ändamål:

GetFileVersionInfoSize returnerar storleken på versionsinformationen. GetFileVersionInfo använder information som hämtats av GetFileVersionInfoSize för att hämta en struktur som innehåller versionsinformationen. VerQueryValue hämtar en specifik medlem från den strukturen.

Om VerInstallFile returnerar VIF_DIFFTYPE-felet bör installationsprogrammet till exempel använda GetFileVersionInfoSize, GetFileVersionInfooch VerQueryValue funktioner på de tillfälliga filerna och målfilerna för att hämta den allmänna typen av varje fil. Om språken i filerna står i konflikt bör installationsprogrammet också använda VerLanguageName för att översätta identifieraren för binärt språk till en textrepresentation av språket. (Till exempel översätts 0x040C till strängen "Franska")

Om VerInstallFile returnerar ett filfel, till exempel VIF_ACCESSVIOLATION, bör installationsprogrammet använda funktionen GetLastError för att hämta det senaste felvärdet. Programmet bör översätta det här värdet till ett informativt meddelande som ska visas för användaren. Programmet får inte ge kontroll mellan anropen till VerInstallFile och GetLastError.