Erstellen eines ICE

Wenn Sie unter den vorhandenen benutzerdefinierten ICE-Aktionen, die in der ICE-Referenz aufgeführt sind, nicht die internen Konsistenzauswertungsfunktionen (Internal Consistency Evaluators, ICE) finden können, müssen Sie Ihren eigenen ICE vorbereiten, um Ihr Paket zu überprüfen.

Beim Erstellen benutzerdefinierter ICE-Aktionen sollten Sie die folgenden Schritte ausführen:

  • Verwenden Sie als Basis der ICEs nur benutzerdefinierte Aktionen von Typen, die in der gezeigten Tabelle aufgeführt sind.
  • Rufen Sie MsiProcessMessage auf, und posten Sie einen INSTALLMESSAGE_USER-Nachrichtentyp. Wenn Sie Ihre ICE-Nachrichten erstellen, halten Sie das in den ICE-Nachrichtenrichtlinien dargelegte Nachrichtenformat ein.
  • Schreiben Sie Ihren ICE so, dass alle API-Fehler erfasst werden und immer ERROR_SUCCESS zurückgegeben wird. Dies ist erforderlich, damit nachfolgende benutzerdefinierte Aktionen nach dem Fehler eines ICE ausgeführt werden können.

Benutzerdefinierte ICE-Aktionen sind auf die folgenden benutzerdefinierten Aktionstypen beschränkt.

Benutzerdefinierter Aktionstyp BESCHREIBUNG
Benutzerdefinierter Aktionstyp 1 DLL im binären Datenstrom
Benutzerdefinierter Aktionstyp 2 EXE im binären Datenstrom
Benutzerdefinierter Aktionstyp 5 JScript im binären Datenstrom
Benutzerdefinierter Aktionstyp 6 VBScript im binären Datenstrom
Benutzerdefinierter Aktionstyp 37 JScript-Code als Zeichenfolge
Benutzerdefinierter Aktionstyp 38 VBScript-Code als Zeichenfolge

 

Unterlassen Sie beim Erstellen einer benutzerdefinierten ICE-Aktion Folgendes:

  • Gehen Sie nicht davon aus, dass das Handle für die Engine, das der ICE empfängt, eine Installationsinstanz der Installationsdatenbank ist. Wenn es sich nicht um eine Installationsinstanz handelt, sind bestimmte Eigenschaften nicht definiert, die Quell- und Zielverzeichnisse werden nicht aufgelöst, und die aktuellen Featurezustände sind nicht definiert.
  • Verlassen Sie sich nicht auf die vorherige oder eine gar nicht ausgeführte Ausführung einer Installationsprogrammaktion, einer benutzerdefinierten Aktion oder eines anderen ICE. Da ein vorheriger ICE möglicherweise temporäre Spalten in einer beliebigen Tabelle erstellt hat, sollten Autoren nach Möglichkeit anhand des Namens auf Spalten verweisen. ICEs sollten alle temporären Spalten oder Tabellen bereinigen, bevor sie beendet werden.
  • Gehen Sie nicht davon aus, dass Autoren Zugriff auf ein Image des Quellverzeichnisses der Datenbank haben.
  • Gehen Sie nicht davon aus, dass an der Datenbank vorgenommene Änderungen nicht erhalten bleiben.

Beispiel-ICE in C++

Beispiel-ICE in VBScript