Planungsoptionen für die Ausführung benutzerdefinierter Aktionen
Da eine benutzerdefinierte Aktion sowohl auf der Benutzeroberfläche als auch in den Ausführungssequenztabellen geplant und entweder im Dienst- oder Clientprozess ausgeführt werden kann, lässt sich eine benutzerdefinierte Aktion potenziell mehrmals ausführen.
Beachten Sie diese Merkmale des Installers:
- Führt Aktionen in einer Sequenztabelle standardmäßig sofort aus.
- Führt keine Aktion aus, wenn das Feld des bedingten Ausdrucks der Sequenztabelle als FALSE ausgewertet wird.
- Verarbeitet die Sequenztabelle der Benutzeroberfläche im Clientprozess, wenn die Schnittstellenebene des internen Benutzers auf den vollständigen Benutzeroberflächenmodus festgelegt ist (eine Beschreibung von Benutzeroberflächenebenen finden Sie unter MsiSetInternalUI).
- Ist ein Dienst, der bei Verwendung von Windows 2000 standardmäßig registriert ist. In diesem Fall wird die Ausführungssequenztabelle im Installerdienst verarbeitet.
Sie können die folgenden Optionsflags verwenden, um mehrere sofortige Ausführungen benutzerdefinierter Aktionen zu steuern. Um eine Option festzulegen, fügen Sie den Wert in dieser Tabelle dem Wert im Type-Feld der CustomAction-Tabelle hinzu. Keines der folgenden Flags sollte mit benutzerdefinierten Aktionen mit verzögerter Ausführung verwendet werden.
-
(Standard)
-
Hexadezimal: 0x00000000
Dezimal: 0
Immer ausführen. Die Aktion kann zweimal ausgeführt werden, wenn sie in beiden Sequenztabellen vorhanden ist.
-
msidbCustomActionTypeFirstSequence
-
Hexadezimal: 0x00000100
Dezimal: 256
Nicht mehr als einmal ausführen, falls in beiden Sequenztabellen vorhanden. Überspringt stets die Aktion in der Ausführungssequenz, wenn die Benutzeroberflächensequenz ausgeführt wurde. Keine Auswirkung auf die Benutzeroberflächensequenz. Die Aktion muss nicht in der Benutzeroberflächensequenz vorhanden sein oder ausgeführt werden, um in der Ausführungssequenz übersprungen zu werden. Nicht von Installationsdienstregistrierung betroffen.
-
msidbCustomActionTypeOncePerProcess
-
Hexadezimal: 0x00000200
Dezimal: 512
Einmal pro Prozess ausführen, falls in beiden Sequenztabellen vorhanden. Überspringt die Aktion in der Ausführungssequenz, wenn die Benutzeroberflächensequenz im selben Prozess ausgeführt wurde, z. B. beide im Clientprozess ausgeführt werden. Wird verwendet, um zu verhindern, dass Aktionen, die den Sitzungszustand ändern, z. B. Eigenschaften- und Datenbankdaten, zweimal ausgeführt werden.
-
msidbCustomActionTypeClientRepeat
-
Hexadezimal: 0x00000300
Dezimal: 768
Nur einmal ausführen, falls auf dem Client ausgeführt, nachdem die Benutzeroberflächensequenz ausgeführt wurde. Die Aktion wird nur ausgeführt, wenn die Ausführungssequenz auf dem Client nach der Benutzeroberflächensequenz ausgeführt wird. Kann verwendet werden, um Entweder-oder-Logik bereitzustellen oder um die auf die Benutzeroberfläche bezogene Verarbeitung zu unterdrücken, falls bereits für die Clientsitzung erfolgt.
Beachten Sie, dass Sie, wenn Sie eine benutzerdefinierte Aktion in zwei verschiedenen Ausführungsmodi ausführen möchten, zwei Einträge in der CustomAction-Tabelle vornehmen müssen. Wenn Sie beispielsweise eine benutzerdefinierte Aktion wünschen, die eine C/C++-DLL (Dynamic Link Library) aufruft ( Benutzerdefinierter Aktionstyp 1), und zwar sowohl im Modus MSIRUNMODE_SCHEDULED als auch im Modus MSIRUNMODE_ROLLBACK, legen Sie zwei Einträge in der CustomAction-Tabelle an, die dieselbe DLL aufrufen, aber unterschiedliche numerische Typen haben. Fügen Sie Code ein, der MsiGetMode aufruft, um zu bestimmen, wann welche benutzerdefinierte Aktion ausgeführt werden soll.
Zugehörige Themen