使用可传递组件

可传递组件的一个典型用途是准备在系统升级期间重新安装的产品。 安装包的作者将系统升级期间需要交换的组件指定为具有可传递属性。 当用户稍后升级系统时,必须重新安装该产品。 重新安装后,安装程序将删除早期组件并安装更高版本的组件,而无需安装整个产品。

在安装包中包括两个可传递组件

  1. 在安装包中包括这两个可传递组件。

  2. 将两个可传递组件都 创作到组件表中 ,与常规组件相同。 每个可传递组件都必须在 ComponentId 列中指定自己的唯一 GUID。

  3. 在每个可传递组件的"组件"表的"属性"列中包括 msidbComponentAttributesTransitive 位。 如果设置了此位,则安装程序在重新安装时重新评估"条件"列中语句的值。

    如果该值以前为 False 并且已更改为 True,则安装程序将安装 组件。

    如果该值以前为 True,并且已更改为 False,则安装程序将删除该组件,即使组件具有其他产品作为客户端也是如此。

    备注

    除非设置了可传递位,否则即使条件语句在产品的后续维护安装中计算结果为 False,组件在安装后仍保持启用状态。 条件必须仅基于计算机状态。 请勿将 与基于命令行上设置的用户状态或属性的条件一起使用,因为这可能会导致安装程序每次由其他用户使用时都需要重新安装产品。

  4. 在 Control 表的"条件"字段中输入补充条件表达式,这样当第一个可传递组件的条件变为 False 时,第二个可传递组件的条件将变为 True。 这导致在重新安装应用程序时删除第一个组件并安装第二个组件。

若要切换可传递组件,需要重新安装产品。 因此,包作者需要为用户提供重新安装产品和设置 REINSTALLMODE 属性模式的方法。 基本上有三种方法可以触发重新安装:

  • 通过用户界面运行并配置重新安装,方法为创作使用完整 UI 的包
  • 使用 msiexec /f 从命令行运行重新安装,然后从 /f 命令行选项 的列表中选择 模式
  • 使应用程序调用 MsiReInstallProductMsiReInstallFeature

位应仅用于基于计算机状态的条件。 请勿将 与基于命令行上设置的用户状态或属性的条件一起使用,因为这可能会导致安装程序每次由其他用户使用时都需要重新安装产品。

备注

除非为组件设置了"属性"列中的"可传递"位,否则组件在安装后仍保持启用状态,即使"条件"列中的条件语句在产品的后续维护安装中计算结果为 False。

在大多数情况下,如果应用程序包含可传递组件,Windows安装程序需要应用程序的源来修复或升级应用程序。 在这些情况下,原始设备制造商提供的系统还原 CD-ROM 不起作用,需要提供应用程序的实际安装源。