延迟执行自定义操作
延迟执行自定义操作的目的是将系统更改执行时间延迟到执行安装脚本时。 这与常规自定义操作或标准操作不同,在常规自定义操作或标准操作中,安装程序在序列表中遇到操作后立即执行操作,或者在遇到对 MsiDoAction 的调用时立即执行操作。 延迟执行自定义操作使包作者能够在执行安装脚本的特定点指定系统操作。
在处理安装序列时,安装程序不会执行延迟执行自定义操作。 相反,安装程序会将自定义操作写入安装脚本。 在这种情况下,安装程序设置的唯一模式参数是MSIRUNMODE_SCHEDULED。 有关运行模式参数的说明,请参阅 MsiGetMode。
必须在执行脚本生成的节内的执行序列表中计划延迟执行自定义操作。 在操作序列中,延迟执行自定义操作必须在 InstallInitialize 之后,且在 InstallFinalize 之前。
设置属性、功能状态、组件状态或目标目录的自定义操作,或通过在序列表中插入行来计划系统操作的自定义操作在许多情况下可以安全地使用即时执行。 但是,直接更改系统或调用其他系统服务的自定义操作必须推迟到在执行安装脚本时执行。 请参阅同步和异步自定义操作,有关其自定义操作与主安装线程之间的潜在冲突的更多信息。
由于安装脚本可能会在写入安装脚本的安装会话之外执行,因此在安装脚本执行期间,该会话可能已不存在。 这意味着安装序列期间的原始会话句柄和属性数据集不适用于延迟执行自定义操作。 调用动态链接库 (DLL) 的延迟自定义操作传递一个句柄,该句柄只能用于获取非常有限的信息,如获取延迟执行自定义操作的上下文信息中所述。
请注意,延迟的自定义操作(包括回滚自定义操作和提交自定义操作)是可在用户安全上下文外部运行的唯一操作类型。
相关主题