自定义操作执行计划选项

由于可以在 UI 和执行序列表中计划自定义操作,并且可以在服务或客户端进程中执行自定义操作,因此自定义操作可能会执行多次。

请注意,安装程序:

  • 默认情况下,立即在序列表中执行操作。
  • 如果序列表的条件表达式字段的计算结果为 False,则不执行操作。
  • 如果内部用户的界面级别设置为完整 UI 模式,则处理客户端进程中的 UI 序列表(有关 UI 级别的说明,请参阅 MsiSetInternalUI)。
  • 使用 Windows 2000 时默认注册的服务,在本例中,执行序列表在安装程序服务中进行处理。

可以使用以下选项标志来控制自定义操作的多个立即执行。 若要设置选项,请将此表中的值添加到 CustomAction 表的 Type 字段中的值。 不应将以下标志用于延迟执行自定义操作

(default)

十六进制:0x00000000

十进制:0

始终执行。 如果操作同时存在于两个序列表中,则可能会运行两次。

msidbCustomActionTypeFirstSequence

十六进制:0x00000100

十进制:256

如果同时存在于两个序列表中,则执行不超过一次。 如果 UI 序列已运行,则始终跳过执行序列中的操作。 不影响 UI 序列。 操作无需在 UI 序列中存在或运行,即可在执行序列中跳过。 不受安装服务注册的影响。

msidbCustomActionTypeOncePerProcess

十六进制:0x00000200

十进制:512

如果同时存在于两个序列表中,则每个进程执行一次。 如果 UI 序列已在同一进程中运行(例如两者都在客户端进程中运行),则跳过执行序列中的操作。 用于防止修改会话状态的操作(如属性和数据库数据)运行两次。

msidbCustomActionTypeClientRepeat

十六进制:0x00000300

十进制:768

仅在 UI 序列运行后在客户端上运行时才执行。 仅在 UI 序列后在客户端上运行执行序列时,才会运行操作。 可用于提供或逻辑,或者禁止对客户端会话执行 UI 相关处理(如果已完成)。

请注意,若要在两种不同的运行模式下运行自定义操作,请将两个条目创作到 CustomAction 表中。 例如,若要在模式同时为 MSIRUNMODE_SCHEDULED 和 MSIRUNMODE_ROLLBACK 时使自定义操作调用 C/C++ 动态链接库 (DLL)(自定义操作类型 1),请在调用相同 DLL 但具有不同数值类型的 CustomAction 表中放置两个条目。 包括调用 MsiGetMode 以确定何时运行哪个自定义操作的代码。

自定义操作参考

关于自定义操作

使用自定义操作