從自訂動作內部存取目前的安裝程式會話

呼叫 動態連結程式庫腳本 的非推斷自訂動作可能會存取執行中的安裝,以查詢或修改目前安裝會話的屬性。 每個進程只能有一個 Session 物件,而且自訂動作腳本不得嘗試建立另一個會話。

自訂動作只能從資料庫新增、修改或移除暫存資料列、資料行或資料表。 自訂動作無法修改資料庫中的持續性資料,例如,屬於儲存在磁片上的資料庫一部分的資料。

動態連結程式庫

若要存取執行中的安裝,呼叫動態連結程式庫的自訂動作 (DLL) 會傳遞目前會話類型 MSIHANDLE 的控制碼,做為 CustomAction Table之 Target 資料行中名為 之 DLL 進入點的唯一引數。 因為安裝程式提供此控制碼,所以自訂動作不應該關閉它,例如,若要從安裝程式接收控制碼 hInstall ,則自訂動作函式會宣告如下。

UINT __stdcall CustomAction(MSIHANDLE hInstall)

如需目前資料庫的唯讀存取,請呼叫 MsiGetActiveDatabase來取得資料庫控制碼。 如需詳細資訊,請參閱 取得資料庫控制碼

指令碼

以 VBScript 或 JScript 撰寫的自訂動作可以使用 Session 物件來存取目前的安裝會話。 安裝程式會建立名為 「 Session 」 的 Session 物件,以參考目前的安裝。 對於目前資料庫的唯讀存取,請使用Session物件的Database屬性。

因為腳本是從 Session 物件的內容執行,所以不一定需要完整限定屬性和方法。 在下列範例中,使用 VBScript 時,Me 參考可以取代 Session 物件,例如,下列三行相等。

Session.SetInstallLevel 1
Me.SetInstallLevel 1
SetInstallLevel 1

可執行檔

您無法從呼叫使用命令列啟動之可執行檔的自訂動作存取目前的安裝程式會話,例如 自訂動作類型 2自訂動作類型 18

延後執行自訂動作

您無法從延後執行自訂動作存取目前的安裝程式會話或所有屬性資料。 如需詳細資訊,請參閱 取得延後執行自訂動作的內容資訊

從自訂動作內部存取資料庫或會話