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