Freigeben über


Erstellen einer ICE

Wenn Sie die von Ihnen benötigten internen Konsistenzauswertungen nicht unter den in der ICE-Referenz aufgeführten benutzerdefinierten ICE-Aktionen finden können, müssen Sie Ihre eigene ICE vorbereiten, um Ihr Paket zu validieren.

Gehen Sie bei der Erstellung von benutzerdefinierten ICE-Aktionen wie folgt vor:

  • Basieren Sie die ICEs nur auf benutzerdefinierten Aktionen der in der Tabelle aufgeführten Typen.
  • Rufen Sie MsiProcessMessage auf, und senden Sie eine Nachricht vom Typ INSTALLMESSAGE_USER. Beachten Sie beim Verfassen Ihrer ICE-Nachrichten das Nachrichtenformat in den Richtlinien für ICE-Nachrichten.
  • Schreiben Sie Ihre ICE so, dass sie alle API-Fehler erfasst und immer ERROR_SUCCESS zurückgibt. Dies ist notwendig, damit nachfolgende benutzerdefinierte Aktionen nach dem Fehlschlagen einer 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ärdatenstrom
Benutzerdefinierter Aktionstyp 2 EXE im Binärdatenstrom
Benutzerdefinierter Aktionstyp 5 JScript im Binärdatenstrom
Benutzerdefinierter Aktionstyp 6 VBScript im Binärdatenstrom
Benutzerdefinierter Aktionstyp 37 JScript-Code als Zeichenfolge
Benutzerdefinierter Aktionstyp 38 VBScript-Code als Zeichenfolge

 

Gehen Sie beim Erstellen einer benutzerdefinierten ICE-Aktion nicht wie folgt vor:

  • Gehen Sie nicht davon aus, dass das Handle für das Modul, das die ICE empfängt, eine Installationsinstanz der Installationsdatenbank ist. Wenn es sich nicht um eine Installationsinstanz handelt, werden bestimmte Eigenschaften nicht definiert, die Quell- und Zielverzeichnisse werden nicht aufgelöst, und aktuelle Featurezustände sind nicht definiert.
  • Verlassen Sie sich nicht auf die vorherige Ausführung oder Nichtausführung von Installationsprogrammaktionen, benutzerdefinierten Aktionen oder anderen ICEs. Da eine vorherige ICE möglicherweise temporäre Spalten in einer Tabelle erstellt hat, sollten Ersteller Spalten nach Möglichkeit immer anhand ihres Namens referenzieren. ICEs müssen alle temporären Spalten oder Tabellen bereinigen, bevor sie beendet werden.
  • Gehen Sie nicht davon aus, dass Ersteller Zugriff auf ein Image des Quellverzeichnisses der Datenbank haben.
  • Gehen Sie nicht davon aus, dass Änderungen an der Datenbank nicht beibehalten werden.

Beispiel-ICE in C++

Beispiel-ICE in VBScript