取得延遲執行自定義動作的內容資訊
因為安裝腳本可以在寫入安裝會話之外執行,所以在執行安裝腳本期間,會話可能已不存在。 在此情況下,在安裝順序期間設定的原始會話句柄和屬性無法供延後執行自定義動作使用。 任何需要會話句柄的函式都僅限於幾個可以擷取內容資訊的方法,否則腳本執行期間所需的屬性必須寫入安裝腳本中。 例如,呼叫動態連結庫 (DLL) 的延後自定義動作會傳遞句柄,此句柄只能用來取得非常有限的資訊量。 不需要會話句柄的函式可以從延後自定義動作存取。
延後執行自定義動作僅限於只呼叫需要句柄的下列函式。
功能 | 描述 |
---|---|
MsiGetProperty | 搭配 延遲執行的自定義動作使用時,僅支援有限屬性集:CustomActionData 屬性、ProductCode 屬性,以及 UserSID 屬性。提交自定義動作 無法通過使用 MsiGetProperty 函式來取得 ProductCode 屬性。 提交自定義動作可以使用 CustomActionData 屬性來取得產品代碼。 |
MsiFormatRecord | 搭配 延遲執行的自定義動作使用時,支援一組有限的屬性:CustomActionData 和 ProductCode 屬性。 |
MsiGetMode | 當從 延遲執行自定義動作、認可自定義動作或 復原自定義動作呼叫時,MsiGetMode 在要求檢查模式參數 MSIRUNMODE_SCHEDULED、MSIRUNMODE_COMMIT 或 MSIRUNMODE_ROLLBACK 時返回 True 或 False。 對檢查任何其他執行模式參數的要求,若來自延後、提交或復原類型的自定義動作,將返回 False。 |
MsiGetLanguage | 目前產品的語言識別碼。認可自定義動作 無法使用 MsiGetLanguage 函式。 提交的自訂動作可以使用 CustomActionData 屬性來取得數值語言 ID。 |
MsiProcessMessage | 處理自定義動作的錯誤或進度訊息。 |
以 JScript 或 VBScript 撰寫的自定義動作需要安裝 Session 物件。 這是 會話物件類型,安裝程式會附加至名稱為 “Session” 的腳本。 由於 Session 物件在安裝復原期間可能不存在,因此腳本中寫入的延後自定義動作必須使用下列其中一種方法或 Session 物件的屬性來擷取其內容。
名字 | 描述 |
---|---|
模式屬性 | 僅針對MSIRUNMODE_SCHEDULED傳回 True。 |
屬性(Session Object) | 會傳回 CustomActionData 屬性、ProductCode 屬性或 UserSID 属性。 |
語言屬性 (會話物件) | 傳回安裝會話的數值語言標識碼。 |
訊息 方法 | 呼叫 以處理錯誤和進度。 |
Installer 屬性 | 傳回父物件,用於非會話函式,例如登錄存取和安裝程式組態管理。 |
在將安裝順序處理成腳本時所設定的屬性值,在腳本執行時可能無法使用。 腳本執行期間,自定義動作一律只能存取下列有限的屬性集。
屬性名稱 | 描述 |
---|---|
CustomActionData | 自定義動作在循序數據表中處理時的值。 CustomActionData 屬性僅適用於延後執行自定義動作。 立即自定義動作無法存取這個屬性。 |
ProductCode | 產品的唯一程式代碼,GUID 字串。 |
UserSID | 由安裝程式設定為使用者的安全性識別碼 (SID)。 |
如果延後執行自定義動作需要其他屬性數據,則必須將其值儲存在安裝腳本中。 這可以使用第二個自定義動作來完成。
若要將屬性的值寫入安裝腳本,以在延後執行自定義動作期間使用
- 將小型自定義動作插入安裝順序,將感興趣的屬性設定為與延後執行自定義動作同名的屬性。 例如,假設延後執行的自定義動作的主鍵是「MyAction」,那麼您需要擷取的屬性 X 將設定為名為「MyAction」的屬性。 您必須在安裝順序中設定 「MyAction」 屬性,才能使用 「MyAction」 自定義動作。 雖然任何類型的自定義動作都可以設定內容數據,但最簡單的方法是使用屬性指派自定義動作(例如 自定義動作類型 51)。
- 在處理安裝順序時,安裝程式會將屬性 X 的值寫入執行腳本中,做為 CustomActionData 屬性的值。
相關主題