Zugreifen auf die aktuelle Installersitzung über eine benutzerdefinierte Aktion
Nicht zurückgestellte benutzerdefinierte Aktionen, die DLLs oder Skripts aufrufen, können auf eine aktive Installation zugreifen, um die Attribute der aktuellen Installationssitzung abzufragen oder zu ändern. Für jeden Prozess kann nur ein Session-Objekt vorhanden sein, und benutzerdefinierte Skripts dürfen nicht versuchen, eine weitere Sitzung zu erstellen.
Benutzerdefinierte Aktionen können in einer Datenbank nur temporäre Zeilen, Spalten oder Tabellen hinzufügen, ändern oder entfernen. Benutzerdefinierte Aktionen können keine persistenten Daten in einer Datenbank ändern, z. B. Daten, die Teil der auf dem Datenträger gespeicherten Datenbank sind.
Um auf eine aktive Installation zuzugreifen, wird benutzerdefinierten Aktionen, die DLLs aufrufen, ein Handle des Typs MSIHANDLE für die aktuelle Sitzung als einziges Argument an den DLL-Einstiegspunkt übergeben, der in der Target-Spalte der CustomAction-Tabelle angegeben ist. Da der Installer dieses Handle bereitstellt, darf die benutzerdefinierte Aktion es nicht schließen. Um beispielsweise das hInstall-Handle vom Installer abzurufen, wird die benutzerdefinierte Aktionsfunktion wie folgt deklariert.
UINT __stdcall CustomAction(MSIHANDLE hInstall)
Rufen Sie für schreibgeschützten Zugriff auf die aktuelle Datenbank das Datenbankhandle ab, indem Sie MsiGetActiveDatabase aufrufen. Weitere Informationen finden Sie unter Abrufen eines Datenbankhandles.
In VBScript oder JScript geschriebene benutzerdefinierte Aktionen können mithilfe des Session-Objekts auf die aktuelle Installationssitzung zugreifen. Der Installer erstellt ein Session-Objekt namens „Session“, das auf die aktuelle Installation verweist. Verwenden Sie für schreibgeschützten Zugriff auf die aktuelle Datenbank die Database-Eigenschaft des Session-Objekts.
Da ein Skript im Kontext des Session-Objekts ausgeführt wird, ist es nicht immer erforderlich, Eigenschaften und Methoden vollständig zu qualifizieren. Im folgenden Beispiel kann bei Verwendung von VBScript der Me-Verweis das Session-Objekt ersetzen. Beispielsweise sind die folgenden drei Zeilen gleichwertig.
Session.SetInstallLevel 1
Me.SetInstallLevel 1
SetInstallLevel 1
Sie können nicht auf die aktuelle Installersitzung zugreifen, wenn benutzerdefinierte Aktionen ausführbare Dateien aufrufen, die über eine Befehlszeile gestartet werden, z. B. Benutzerdefinierte Aktion Typ 2 und Benutzerdefinierte Aktion Typ 18.
Benutzerdefinierte Aktionen mit zurückgestellter Ausführung
Sie können nicht auf die aktuelle Installersitzung oder alle Eigenschaftendaten in einer benutzerdefinierten Aktion mit zurückgestellter Ausführung zugreifen. Weitere Informationen finden Sie unter Abrufen von Kontextinformationen benutzerdefinierte Aktionen mit zurückgestellter Ausführung.
Zugehörige Themen