自定义操作排序

在序列表中计划自定义操作的方式与标准操作相同。

在序列表中计划自定义操作

  1. Sequence 表的 Action 列中输入自定义操作名称(也就是 CustomAction 表的主键)。
  2. Sequence 表的 Sequence 列中输入自定义操作相对于表中其他操作的序列。 有关序列表的详细信息,请参阅使用 Sequence 表
  3. 若根据条件跳过操作,请在 Sequence 表的 Condition 列中输入条件表达式。 如果表达式的计算结果为 FALSE,安装程序将跳过此操作。

与标准操作一样,仅当内部用户界面设置为完整级别时,InstallUISequenceAdminUISequence 中计划的自定义操作才会运行。 UI 级别是使用 MsiSetInternalUI 函数设置的。

InstallExecuteSequenceAdminExecuteSequenceAdvtExecuteSequence 表中计划的标准和自定义操作不会进行系统更改。 安装程序会将脚本中的执行记录排入队列,以便在安装服务期间进行后续执行。 如果没有安装服务,则这些表中计划的操作将在与 UI 序列相同的上下文中运行。

如果未注册安装程序服务器,则会在客户端执行自定义操作。 如果服务器已注册并使用完整 UI 模式,则自定义操作在服务器端运行。

如果将完整 UI 与服务器配合使用,则会在客户端上运行 InstallValidate 操作之前的初始操作,以允许完全交互。 然后,切回到服务器执行,服务器将重复这些操作并运行脚本执行操作的服务器。 随后返回给客户端执行最终操作。

请注意,如果通过将产品的顶级功能设置为不存在来删除产品,则在执行 InstallValidate 操作之前,REMOVE 属性可能不等于 ALL。 这意味着依赖于 REMOVE=ALL 的任何自定义操作必须排在 InstallValidate 操作之后。 自定义操作可能会检查 REMOVE 来确定产品是否已设置为完全卸载。

引用已安装文件作为源的自定义操作(例如自定义操作类型 17 (DLL)、自定义操作类型 18 (EXE)、自定义操作类型 21 (JScript) 和自定义操作类型 22 (VBScript))必须遵守以下排序限制。

  • 必须将自定义操作排在 CostFinalize 操作之后,这样才能解析引用文件的路径。
  • 如果源文件尚未安装在计算机上,则必须将延迟(脚本内)自定义操作排在 InstallFiles 之后。
  • 如果源文件尚未安装在计算机上,则必须将非延迟自定义操作排在 InstallInitialize 操作之后。

以下排序限制适用于更改或更新 Windows Installer 包的自定义操作。

  • 如果自定义操作更改包(例如通过向表添加行),则操作必须排在在 InstallInitialize 操作之前。
  • 如果自定义操作进行的更改会影响成本计算,则自定义操作应排在 CostInitialize 操作之前。
  • 如果自定义操作更改了功能或组件的安装状态,则自定义操作必须在 InstallValidate 操作之前。