Windows Installer für Spieleentwickler

Zeigt, wie Windows Installer zum Installieren von Spielen auf Endbenutzercomputern verwendet werden kann. Windows Installer bietet vollständige Unterstützung für eine angepasste Benutzeroberfläche sowie für Patches.

Microsoft Windows Installer ist die bevorzugte API für die Installation von Software auf Windows-basierten Computern. Während viele der Features von Windows Installer zur Unterstützung der Bereitstellung von Geschäftsanwendungen in einer Unternehmensumgebung entwickelt wurden, eignet sich Windows Installer auch vollständig für die Installation von Spielen auf Endbenutzercomputern. Die Hauptvorteile der Verwendung von Windows Installer für die Spieleinstallation sind:

  • Zuverlässige Deinstallation
  • Möglichkeit, Inhalte bei Bedarf zu installieren
  • Unterstützung für vollständig benutzerdefinierte Benutzeroberfläche
  • Effizientes Patchen

Dieser Artikel bietet eine Übersicht über Windows Installer, die sich speziell an Spieleentwickler richtet. Eine ausführliche Dokumentation zu den in diesem Artikel genannten Features und APIs finden Sie im Windows-Plattform-SDK.

Übersicht

Alle Windows Installer-basierten Setups verwenden eine Installationsdatenbankdatei namens MSI-Datei, um zu beschreiben, wie die Anwendung installiert werden soll. Die MSI-Datei enthält Informationen dazu, welche Dateien, Registrierungsschlüssel, Desktopverknüpfungen, Dateizuordnungen und andere Anwendungselemente installiert werden sollen. Die eigentlich zu installierenden Dateien können in der MSI-Datei selbst komprimiert, gebündelt und in separate "Cabinet-Dateien" komprimiert oder an anderer Stelle auf den Installationsmedien als einzelne unkomprimierte Dateien gespeichert werden. Die MSI-Datei kann auch auf extern implementierte benutzerdefinierte Aktionen verweisen, um Aktionen zuzulassen, für die die MSI-Datei nicht nativ zulässt.

Eine MSI-Datei kann optional eine Benutzeroberfläche enthalten, die den Benutzer durch den Installationsvorgang führt. Diese Benutzeroberfläche eignet sich für die meisten Anwendungen. Es hat jedoch das Aussehen und Verhalten einer normalen Windows-Anwendung, und viele Spieleentwickler bevorzugen es, dass ihre Setupanwendung das Aussehen und Verhalten des Spiels selbst behält, um eine konsistentere Endbenutzererfahrung zu bieten. Zur Unterstützung dieses vollständig benutzerdefinierten Ui-Szenarios kann eine Setupanwendung die integrierte Benutzeroberfläche von Windows Installer deaktivieren und die gesamte Benutzeroberfläche selbst verarbeiten. Die Windows Installer-API macht einen Rückrufmechanismus verfügbar, damit eine benutzerdefinierte Setup-Benutzeroberfläche über den Fortschritt der Installation sowie über wichtige Ereignisse wie Datenträgeränderungsanforderungen benachrichtigt werden kann.

Windows Installer ist keine End-to-End-Lösung zum Erstellen von Setups. Es ist nur eine API, die von einem Setupprogramm verwendet werden kann, um die tatsächliche Installation von Dateien, Registrierungsschlüsseln, Desktopverknüpfungen und anderen Elementen der Anwendung durchzuführen. Aktuelle Versionen aller wichtigen kommerziellen Setuptools (z. B. InstallShield, WISE und Microsoft Visual Studio) unterstützen Windows Installer. Diese Tools bieten praktische Benutzeroberflächen zum Erstellen des Setups für ein Spiel, aber sie sind auf die Windows Installer-API angewiesen, um einen Großteil der eigentlichen Installation durchzuführen. Diese Tools können auch nur zum Erstellen einer MSI-Datenbank verwendet werden, die das Setuppaket enthält, das dann über eine benutzerdefinierte Setup-Benutzeroberfläche installiert werden kann. Als Alternative zu Drittanbietertools bietet die Windows Installer-API alle Funktionen, die zum programmgesteuerten Erstellen und Bearbeiten einer MSI-Datenbank erforderlich sind, und die Windows-Plattform-SDK enthält ein bare-Bones-MSI-Datenbankbearbeitungstool namens Orca.

Wichtige Windows Installer-Konzepte

Hier sind die Komponenten und Features von Windows Installer aufgeführt.

Komponenten

Eine Anwendung besteht aus einer oder mehreren Komponenten, die durch eine GUID-Komponenten-ID identifiziert werden. Eine Komponente ist eine atomische Einheit; sie ist entweder vollständig oder gar nicht installiert. Eine Komponente kann aus einer einzelnen Datei, mehreren Dateien, Registrierungsschlüsseln, Desktopverknüpfungen oder einer Kombination davon bestehen. Die Ressourcen (Dateien usw.) in einer Komponente müssen für diese Komponente eindeutig sein. Keine zwei Komponenten können dieselbe Ressource enthalten. Eine Komponente wird nie explizit installiert. Es wird nur als Teil eines Features installiert (siehe unten).

Funktionen

Ein Feature ist eine Gruppe von Komponenten, die durch eine GUID-Feature-ID identifiziert werden. Im Gegensatz zu Komponenten können mehrere Features dieselbe Komponente enthalten. Eine Komponente, die von mehreren Features gemeinsam genutzt wird, wird installiert, wenn eines dieser Features installiert ist, und nur dann entfernt, wenn alle Features, die auf die Komponente verweisen, deinstalliert wurden. Die Installation eines Features kann automatisch im Rahmen der Installation eines Produkts oder manuell mithilfe der MsiConfigureFeature-API erfolgen.

Obwohl nur wenige Spiele über mehrere "Features" verfügen, die unabhängig installiert werden können, ist das Windows Installer-Konzept eines Features immer noch nützlich. Da ein Windows Installer-Feature nichts anderes ist als eine Sammlung von Komponenten, die zusammen installiert werden können, können Spiele Features verwenden, um alle Inhalte zu gruppieren, die für eine bestimmte Phase des Spiels erforderlich sind. Beispielsweise könnte ein levelorientiertes Spiel ein Feature pro Level definieren, das aus allen inhalten besteht, die für dieses Level erforderlich sind. Dies würde es dem Spiel ermöglichen, den Inhalt eine Ebene nach dem anderen aus dem Spiel selbst zu installieren, anstatt alle Inhalte für alle Ebenen während der Erstinstallation zu installieren.

Installationsstatus

Jede Komponente oder Jedes Feature verfügt über einen zugeordneten Installationsstatus, der bestimmt, ob die Komponente oder das Feature verfügbar ist, und wenn ja, wo die Dateien für die Komponente oder das Feature installiert werden. Die möglichen Installationszustände für ein Feature sind:

Abwesend

Das Feature ist nicht installiert und daher nicht zugänglich.

Lokal

Das Feature ist verfügbar und wird für die Ausführung von der lokalen Festplatte installiert.

Quelle

Das Feature ist verfügbar und wird installiert, um auf dem ursprünglichen Quellmedium (in der Regel eine CD oder DVD) auszuführen.

Angekündigt

Das Feature ist nicht installiert, kann aber bei Bedarf mithilfe der MsiConfigureFeature-API installiert werden. Wenn das Feature tatsächlich installiert ist, kann es entweder im Lokalen oder Quellzustand installiert werden.

Eine Komponente kann einen der oben genannten Zustände mit Ausnahme von "Angekündigt" aufweisen. Wenn eine Komponente Teil eines angekündigten Features ist, wird die Komponente als "Abwesend" angezeigt, bis das Feature installiert ist.

Bei Bedarf installieren

Windows Installer ermöglicht es einer Anwendung, Features als angekündigt zu markieren, was bedeutet, dass das Feature noch nicht installiert ist, aber bei Bedarf zur Laufzeit installiert werden kann. Das Installieren von Features zur Laufzeit wird als "Bei Bedarf installieren" bezeichnet. Spiele können "Install on Demand" verwenden, um die für das anfängliche Spielsetup erforderliche Zeit drastisch zu verkürzen, indem die Installation von Spielinhalten zurückgehalten wird, bis sie zur Laufzeit benötigt werden. Die für die Installation des Inhalts zur Laufzeit erforderliche Verzögerung kann häufig teilweise oder vollständig ausgeblendet werden, indem die Bedarfsinstallation in einem Hintergrundthread durchgeführt wird, während der Benutzer ansonsten mit dem Spiel beschäftigt ist.

Benutzerdefinierte Benutzeroberfläche

Obwohl Windows Installer eine Standard-Benutzeroberfläche bereitstellt, die den Benutzer durch die Installation der Anwendung führt, sieht diese Schnittstelle wie eine Windows-Standardanwendung aus. Viele Spieleentwickler bevorzugen es, dass ihre Installationsoberfläche das gleiche Aussehen und Verhalten wie das Spiel selbst hat, um dem Benutzer einen Vorgeschmack auf das Ambiente des Spiels zu geben. Um dies zu unterstützen, ermöglicht Windows Installer die vollständige Deaktivierung der integrierten Benutzeroberfläche, sodass der Entwickler eine vollständig benutzerdefinierte Benutzeroberfläche bereitstellen kann.

Das benutzerdefinierte Setupprogramm deaktiviert zunächst die integrierte Benutzeroberfläche von Windows Installer mithilfe der MsiSetInternalUI-API , um die Ui-Ebene auf INSTALLUILEVEL_NONE festzulegen. Anschließend wird die MsiSetExternalUI-API aufgerufen, um eine Rückruffunktion anzugeben, die während des Installationsvorgangs aufgerufen wird, um das Setupprogramm über wichtige Ereignisse während der Installation zu benachrichtigen.

Der eigentliche Installationsprozess wird dann durch Aufrufen der MsiInstallProduct-API gestartet. Diese API akzeptiert eine Parameterzeichenfolge, mit der der Aufrufer Werte für benannte Eigenschaften angeben kann. Diese Eigenschaften können in der Installationsdatenbank selbst verwendet werden, um anzupassen, wie die Anwendung installiert werden soll. Diese Eigenschaften können verwendet werden, um Folgendes anzugeben:

  • Das Verzeichnis, in dem die Anwendung installiert werden soll
  • Welche Features lokal installiert werden sollen und welche von der CD/DVD ausgeführt werden sollen (z. B. um die Auswahl zwischen einer minimalen Installation und einer vollständigen Installation zu ermöglichen)
  • Gibt an, ob die Anwendung für alle Benutzer des Computers oder nur für den aktuellen Benutzer installiert werden soll.

Während der Installation verwendet das Setupprogramm die an seine Rückruffunktion gesendeten Benachrichtigungen, um zu bestimmen, wann die Benutzeroberfläche der Statusanzeige aktualisiert werden soll, wann der Benutzer aufgefordert werden soll, die nächste CD einzulegen oder wann der Benutzer über einen Fehler im Installationsvorgang benachrichtigt werden soll.

Patching

Windows Installer ermöglicht das Patchen installierter Anwendungen durch Anwenden einer Patchdatei. Eine Patchdatei enthält die neuen Dateien, die vom Patch hinzugefügt werden sollen, die Dateien, die vom Patch geändert werden, und eine Liste der Änderungen, die an der Installationsdatenbank vorgenommen werden sollen. Um Speicherplatz zu sparen, enthält die Patchdatei tatsächlich nur die Unterschiede zwischen der ursprünglichen Version der Datei und der neuen Version der Datei, anstatt den vollständigen Inhalt einer datei zu speichern, die durch den Patch geändert wurde.

Um einen Patch zu erstellen, benötigen Sie das Setupimage für jede Version der Anwendung, von der der Patch aktualisiert werden soll, sowie das Setupimage für die neue, aktualisierte Version der Anwendung. Ein Setupimage besteht aus der MSI-Datenbank und allen tatsächlichen Datendateien für die Anwendung. Die beste Möglichkeit, ein Setupimage für eine neue Version der Anwendung zu erstellen, besteht darin, das Setupimage aus der vorherigen Version der Anwendung zu kopieren und dann alle Erforderlichen Änderungen vorzunehmen, um diese Kopie auf die gepatchte Version zu aktualisieren.

Sobald Sie über alle erforderlichen Setupimages verfügen, können Sie die Patches mithilfe von Msimsp.exe erstellen, einem Patcherstellungstool, das als Teil des Platform SDK verfügbar ist. Das Tool fragt nach den Speicherorten der einzelnen Setupimages und bestimmt dann, wie die Unterschiede zwischen den aufeinander folgenden Versionen effizient dargestellt werden sollen. Die Ausgabe des Tools ist die endgültige Patchdatei (identifiziert durch die Erweiterung MSP). Um den Patch programmgesteuert zu installieren, rufen Sie die MsiApplyPatch-API auf. Der Benutzer kann den Patch auch manuell installieren, indem er in Explorer auf die MSP-Datei doppelklicken.

Weitere Ressourcen