共用方式為


自定義動作執行排程選項

因為自定義動作可以在 UI 和執行順序數據表中排程,而且可以在服務或客戶端進程中執行,因此自定義動作可能會執行多次。

請注意,安裝程式:

  • 預設會立即在序列數據表中執行動作。
  • 如果序列數據表的條件表達式字段評估為 False,則不會執行動作。
  • 如果內部使用者的介面層級設定為完整的UI模式,則處理用戶端程式中的UI順序數據表(如需UI層級的描述,請參閱 MsiSetInternalUI)。
  • 這是使用 Windows 2000 時預設註冊的服務,在此情況下,會在安裝程式服務中處理執行順序數據表。

您可以使用下列選項旗標來控制自定義動作的多個立即執行。 若要設定選項,請將此表格中的值新增至 CustomAction 表格的 Type 欄位值。 下列任何旗標都不應與 延遲執行的自定義動作搭配使用,

(預設值)

十六進位:0x00000000

十進位:0

一律執行。 如果這兩個序列數據表中都有,動作可能會執行兩次。

msidbCustomActionTypeFirstSequence

十六進位:0x00000100

十進制:256

如果這兩個序列數據表中都存在,則執行不超過一次。 若 UI 序列已執行,則總是跳過執行序列中的動作。 在 UI 序列中沒有作用。 不需要在 UI 序列中出現或執行動作,才能在執行順序中略過。 不受安裝服務註冊影響。

msidbCustomActionTypeOncePerProcess

十六進位:0x00000200

十進位:512

如果在這兩個序列數據表中,每個進程都會執行一次。 如果UI序列已在相同進程中執行,則會略過執行順序中的動作,例如,這兩者都在客戶端進程中執行。 用於防止那些能修改工作階段狀態的操作,例如屬性管理和資料庫操作,被重覆執行。

msidbCustomActionTypeClientRepeat

十六進位:0x00000300

十進位:768

只有在 UI 順序執行之後在用戶端上執行時才執行。 只有在執行序列是在客戶端跟隨 UI 序列後運行時,該動作才會執行。 可用來提供「或/或」邏輯,或者在用戶端會話中已完成的情況下抑制UI相關的處理。

請注意,若要在兩個不同的執行模式期間執行自訂動作,請在 CustomAction 資料表 中撰寫兩個條目。 例如,若要讓自定義動作呼叫 C/C++動態連結庫 (DLL) (自定義動作類型 1),當模式是MSIRUNMODE_SCHEDULED和MSIRUNMODE_ROLLBACK時,請將兩個專案放在 CustomAction 數據表中,呼叫相同 DLL 但具有不同數值類型。 包含呼叫 MsiGetMode 的程式代碼,以判斷執行哪個自定義動作的時機。

自定義動作參考

自定義動作相關內容

使用自訂動作