自訂動作執行排程選項

由於自訂動作可以在 UI 和執行順序資料表中排程,而且可以在服務或用戶端程式中執行,所以自訂動作可能會執行多次。

請注意,安裝程式:

  • 預設會立即在序列資料表中執行動作。
  • 如果序列資料表的條件運算式欄位評估為 False,則不會執行動作。
  • 如果內部使用者的介面層級設定為完整的 UI 模式, (請參閱 MsiSetInternalUI ,以取得 UI 層級) 的描述,則處理用戶端程式中的 UI 順序資料表。
  • 這是使用 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時,請將兩個專案放在呼叫相同 DLL 但具有不同數數值型別的 CustomAction 資料表中。 包含呼叫 MsiGetMode 的程式碼,以判斷何時要執行哪個自訂動作。

自訂動作參考

關於自訂動作

使用自訂動作