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. durch ersetzen einer Datei in englischer Sprache oder durch eine neuere Datei durch eine ältere Datei.

Beim Schreiben des Installationsprogramms benötigen Sie für jede Datei die folgenden Informationen:

  • Name und Speicherort der Datei (als Quelldatei bezeichnet).
  • Der Name der entsprechenden Datei auf der Festplatte des Benutzers (als Zieldatei bezeichnet). Dieser Name entspricht in der Regel dem Dateinamen auf dem Installationsdatenträger.
  • Der Freigabestatus der Datei, d. h., ob die Datei für die installierte Anwendung privat ist oder von mehreren Anwendungen gemeinsam genutzt 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 VerFindFile VFF _ 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 von VerFindFileangegebenen Verzeichnis. Bei Bedarf erweitert VerInstallFile die Datei mithilfe der Funktionen in der Datendekomprimierungsbibliothek.

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. Beispielsweise wird VIF _ SRCOLD zurückgegeben, 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 VerInstallFile VIF _ TEMPFILE zurückgibt und der Benutzer die Installation nicht erzwingen möchte, sollte das Installationsprogramm die temporäre Datei löschen.

VerInstallFile kann beim Versuch, die Installation zu erzwingen, einen nicht behebbaren Fehler feststellen, obwohl der Fehler zuvor nicht vorhanden war. Beispielsweise kann 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 auf Alle, Ü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 Alle installieren und 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 für diesen 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 einen bestimmten Member aus dieser Struktur ab.

Wenn VerInstallFile beispielsweise den VIF _ DIFFTYPE-Fehler zurückgibt, sollte das Installationsprogramm die Funktionen GetFileVersionInfoSize, GetFileVersionInfound VerQueryValue für die temporären Dateien und Zieldateien verwenden, um den allgemeinen Typ jeder Datei abzurufen. Wenn die Sprachen der Dateien in Konflikt stehen, 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 Meldung übersetzen, die dem Benutzer angezeigt wird. Das Programm darf keine Steuerung zwischen den Aufrufen von VerInstallFile und GetLastError liefern.