從自定義動作內部存取目前的安裝程式會話
非延遲的自定義動作呼叫 動態連結庫 或 腳本,可能會存取正在執行的安裝,以查詢或修改當前安裝會話的屬性。 每個進程只能有一個 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。
您無法從延後執行自訂動作存取目前的安裝程式工作階段或所有屬性資料。 如需詳細資訊,請參閱 取得延遲執行自訂動作的內容資訊。
相關主題