自定义操作执行计划选项
由于可以在 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 以确定何时运行哪个自定义操作的代码。
相关主题