Sequenzieren benutzerdefinierter Aktionen

Benutzerdefinierte Aktionen werden in Sequenztabellen auf die gleiche Weise wie Standardaktionen geplant.

So planen Sie eine benutzerdefinierte Aktion in einer Sequenztabelle

  1. Geben Sie den Namen der benutzerdefinierten Aktion (dies ist der Primärschlüssel der CustomAction-Tabelle) in die Action-Spalte der Sequence-Tabelle ein.
  2. Geben Sie die Sequenz der benutzerdefinierten Aktion relativ zu den anderen Aktionen in der Sequence-Tabelle in die Sequence-Spalte ein. Informationen zu Sequenztabellen finden Sie unter Verwenden einer Sequenztabelle.
  3. Um die Aktion bedingt zu überspringen, geben Sie einen bedingten Ausdruck in die Condition-Spalte der Sequence-Tabelle ein. Das Installationsprogramm überspringt diese Aktion, wenn der Ausdruck zu FALSE ausgewertet wird.

Wie bei Standardaktionen werden benutzerdefinierte Aktionen, die in InstallUISequence oder AdminUISequence geplant sind, nur ausgeführt, wenn die interne Benutzeroberfläche auf die vollständige (full) Ebene festgelegt ist. Die Benutzeroberflächenebene wird mithilfe der MsiSetInternalUI-Funktion festgelegt.

Standardaktionen und benutzerdefinierte Aktionen, die in den Tabellen InstallExecuteSequence, AdminExecuteSequence oder AdvtExecuteSequence geplant sind, nehmen keine Systemänderungen vor. Stattdessen stellt das Installationsprogramm Ausführungsdatensätze in einem Skript für die nachfolgende Ausführung während des Installationsdiensts in die Warteschlange. Wenn kein Installationsdienst vorhanden ist, werden die in diesen Tabellen geplanten Aktionen im gleichen Kontext wie die Benutzeroberflächensequenz ausgeführt.

Wenn der Installer-Server nicht registriert ist, werden die benutzerdefinierten Aktionen clientseitig ausgeführt. Wenn der Server registriert ist und den vollständigen (full) Modus der Benutzeroberfläche verwendet, werden die benutzerdefinierten Aktionen serverseitig ausgeführt.

Wenn Sie die vollständige (full) Benutzeroberfläche mit dem Server verwenden, werden die ersten Aktionen vor der InstallValidate-Aktion auf dem Client ausgeführt, um eine vollständige Interaktion zu ermöglichen. Die Ausführung wird dann an den Server übergeben, der diese Aktionen wiederholt und die Skriptausführungsaktionen ausführt. Darauf folgt eine Rückgabe an den Client für die abschließenden Aktionen.

Beachten Sie, dass die REMOVE-Eigenschaft möglicherweise erst nach der InstallValidate-Aktion gleich ALL ist, wenn ein Produkt entfernt wird, indem sein oberstes Feature auf „nicht vorhanden“ festgelegt wird. Dies bedeutet, dass jede benutzerdefinierte Aktion, die von „REMOVE=ALL“ abhängt, nach der InstallValidate-Aktion sequenziert werden muss. Eine benutzerdefinierte Aktion kann REMOVE überprüfen, um zu ermitteln, ob für ein Produkt die vollständige Deinstallation festgelegt wurde.

Benutzerdefinierte Aktionen, die auf eine installierte Datei als Quelle verweisen, z. B. Benutzerdefinierter Aktionstyp 17 (DLL), Benutzerdefinierter Aktionstyp 18 (EXE), Benutzerdefinierter Aktionstyp 21 (JScript) und Benutzerdefinierter Aktionstyp 22 (VBScript), müssen die folgenden Sequenzierungseinschränkungen einhalten.

  • Die benutzerdefinierte Aktion muss nach der CostFinalize-Aktion sequenziert werden, damit der Pfad zu der Datei, auf die verwiesen wird, aufgelöst werden kann.
  • Wenn die Quelldatei noch nicht auf dem Computer installiert ist, müssen verzögerte (skriptinterne) benutzerdefinierte Aktionen nach InstallFiles sequenziert werden.
  • Wenn die Quelldatei noch nicht auf dem Computer installiert ist, müssen nicht verzögerte benutzerdefinierte Aktionen nach InstallInitialize sequenziert werden.

Die folgenden Sequenzierungseinschränkungen gelten für benutzerdefinierte Aktionen, die ein Windows Installer-Paket ändern oder aktualisieren.

  • Wenn die benutzerdefinierte Aktion das Paket ändert, z. B. durch Hinzufügen von Zeilen zu einer Tabelle, muss die Aktion vor der InstallInitialize-Aktion sequenziert werden.
  • Wenn die benutzerdefinierte Aktion Änderungen vornimmt, die sich auf die Kosten auswirken würden, sollte sie vor der CostInitialize-Aktion sequenziert werden.
  • Wenn die benutzerdefinierte Aktion den Installationszustand von Features oder Komponenten ändert, muss sie vor der InstallValidate-Aktion sequenziert werden.