Verwenden von Versionsinformationen

Ein Installationsprogramm hat in der Regel die folgenden Ziele:

  • So platzieren Sie Dateien am richtigen Speicherort.
  • Um den Benutzer zu benachrichtigen, wenn das Installationsprogramm eine vorhandene Datei durch eine deutlich andere Version ersetzt, z. B. eine deutschsprachige Datei durch eine englischsprachige Datei ersetzen oder eine neuere Datei durch eine ältere Datei ersetzen.

Wenn Sie das Installationsprogramm schreiben, müssen Sie über die folgenden Informationen für jede Datei verfügen:

  • Name und Speicherort der Datei (als Quelldatei bezeichnet).
  • Der Name der entsprechenden Datei auf der Festplatte des Benutzers (als Zieldatei bezeichnet). Dieser Name ist in der Regel identisch mit dem Dateinamen auf dem Installationsdatenträger.
  • Die Freigabe status der Datei, d. h. ob die Datei für die zu installierende Anwendung privat ist oder von mehreren Anwendungen freigegeben werden kann.

Das Installationsprogramm kann die VerFindFile-Funktion verwenden, um zu bestimmen, wo die Datei auf den Datenträger kopiert werden soll. Diese Funktion kann auch verwendet werden, um anzugeben, ob die Datei für die Anwendung privat ist oder freigegeben werden kann. Wenn beim Suchen der Datei ein Problem auftritt, gibt VerFindFile einen Fehlerwert zurück. Wenn das System beispielsweise die Zieldatei verwendet, gibt VerFindFileVFF_FILEINUSE zurück. Das Installationsprogramm muss den Benutzer über das Problem benachrichtigen und auf die Entscheidung des Benutzers reagieren, die Installation fortzusetzen oder zu beenden.

Die VerInstallFile-Funktion kopiert die Quelldatei in eine temporäre Datei in dem durch VerFindFile angegebenen Verzeichnis. Bei Bedarf erweitert VerInstallFile die Datei mithilfe der Funktionen in der Daten-Dekomprimierungsbibliothek.

VerInstallFile vergleicht die Versionsinformationen der temporären Datei mit denen der Zieldatei. Wenn sich die beiden unterscheiden, gibt VerInstallFile einen oder mehrere Fehlerwerte zurück. Sie gibt beispielsweise VIF_SRCOLD zurück, wenn die temporäre Datei älter als die Zieldatei ist, und VIF_DIFFLANG , wenn die Dateien unterschiedliche Sprachbezeichner oder Codepagewerte aufweisen. Das Installationsprogramm muss den Benutzer über das Problem benachrichtigen und auf die Entscheidung des Benutzers reagieren, die Installation fortzusetzen oder zu beenden.

Einige VerInstallFile-Fehler können wiederhergestellt werden. Das heißt, das Installationsprogramm kann VerInstallFile erneut aufrufen und dabei die Option VIFF_FORCEINSTALL angeben, um die Datei unabhängig vom Versionskonflikt zu installieren. Wenn VerInstallFileVIF_TEMPFILE zurückgibt und der Benutzer die Installation nicht erzwingt, sollte das Installationsprogramm die temporäre Datei löschen.

Beim Versuch, die Installation zu erzwingen, kann bei VerInstallFile ein nicht behebbarer Fehler auftreten, obwohl der Fehler zuvor noch nicht vorhanden war. Beispielsweise könnte die Datei von einem anderen Benutzer gesperrt werden, bevor das Installationsprogramm versucht hat, die Installation zu erzwingen. Wenn ein Installationsprogramm versucht, die Installation nach einem nicht wiederherstellbaren Fehler zu erzwingen, schlägt VerInstallFile fehl. Das Installationsprogramm muss Routinen für die Wiederherstellung nach dieser Art von Fehler enthalten.

Die empfohlene Lösung besteht darin, ein Dialogfeld mit den Schaltflächen Installieren, Überspringen und Alle installieren anzuzeigen. (Eine weitere Lösung ist ein Dialogfeld mit den Schaltflächen Ja, Ja zu allen, Überspringen und Abbrechen.) Die Schaltfläche Alle installieren sollte verhindern, dass das Installationsprogramm den Benutzer zu ähnlichen Fehlern auffordert, indem die Option VIFF_FORCEINSTALL in alle nachfolgenden Verwendungen von VerInstallFile eingeschlossen wird. Bei nicht behebbaren Fehlern sollten die Schaltflächen Installieren und Alle installieren deaktiviert sein.

Um dem Benutzer eine nützliche Fehlermeldung anzuzeigen, muss das Installationsprogramm in der Regel Informationen aus den Versionsressourcen der in Konflikt stehenden Dateien abrufen. Es gibt vier Funktionen, die das Installationsprogramm zu diesem Zweck verwenden kann:

GetFileVersionInfoSize gibt die Größe der Versionsinformationen zurück. GetFileVersionInfo verwendet von GetFileVersionInfoSize abgerufene Informationen, um eine Struktur abzurufen, die die Versionsinformationen enthält. VerQueryValue ruft ein bestimmtes Element aus dieser Struktur ab.

Wenn VerInstallFile z. B. den VIF_DIFFTYPE Fehler zurückgibt, sollte das Installationsprogramm die Funktionen GetFileVersionInfoSize, GetFileVersionInfo und VerQueryValue für die temporären Dateien und die Zieldateien verwenden, um den allgemeinen Typ jeder Datei abzurufen. Wenn die Sprachen der Dateien in Konflikt geraten, sollte das Installationsprogramm auch VerLanguageName verwenden, um den binären Sprachbezeichner in eine Textdarstellung der Sprache zu übersetzen. (Beispielsweise wird 0x040C in die Zeichenfolge "Französisch" übersetzt.)

Wenn VerInstallFile einen Dateifehler zurückgibt, z. B. VIF_ACCESSVIOLATION, sollte das Installationsprogramm die GetLastError-Funktion verwenden, um den letzten Fehlerwert abzurufen. Das Programm sollte diesen Wert in eine informative Nachricht übersetzen, die dem Benutzer angezeigt wird. Das Programm darf keine Kontrolle zwischen den Aufrufen von VerInstallFile und GetLastError liefern.