使用可传递组件
可传递组件的典型用途是准备产品,以在系统升级期间重新安装。 安装包的作者将系统升级期间需要交换的组件指定为具有可传递属性。 后续用户升级系统时,需要重新安装产品。 重新安装时,无需安装整个产品,安装程序会移除以前的组件并安装更高版本的组件。
若要在安装包中包含两个可传递组件,请执行以下操作
在安装包中同时包含两个可传递组件。
在 Component 表中创作两个可传递组件,这与常规组件相同。 每个可传递组件必须具有在 ComponentId 列中指定的唯一 GUID。
针对每个可传递组件,在 Component 表的 Attributes 列中包含 msidbComponentAttributesTransitive 位。 如果设置了此位,安装程序将在重新安装时重新评估 Condition 列中语句的值。
如果值以前为 False 且已更改为 True,则安装程序会安装组件。
如果值以前为 True 且已更改为 False,则安装程序会移除组件,即使组件具有其他产品作为客户端,也是如此。
注意
除非设置了可传递位,否则该组件在安装后仍保持启用状态,即使条件语句后来在产品的后续维护安装中计算结果为 False,也是如此。 该条件必须仅基于计算机状态。 请勿与基于用户状态或命令行上设置的属性的条件一起使用,因为这可能会导致安装程序要求在不同用户每次使用时重新安装产品。
在 Control 表的 Condition 字段中输入互补条件表达式,以便当第一个可传递组件上的条件更改为 False 时,第二个可传递组件上的条件更改为 True。 这会导致在重新安装应用程序时移除第一个组件并安装第二个组件。
需要重新安装产品才能切换可传递组件。 因此,包作者需要为用户提供重新安装产品和设置 REINSTALLMODE 属性模式的方法。 主要有三种方法可以触发重新安装:
- 通过创作使用完整 UI 的包,使用用户界面运行和配置重新安装。
- 使用 msiexec /f 从命令行运行重新安装,然后从 /f 命令行选项的列表中选择模式。
- 让应用程序调用 MsiReInstallProduct 或 MsiReInstallFeature。
该位应只能与基于计算机状态的条件一起使用。 请勿与基于用户状态或命令行上设置的属性的条件一起使用,因为这可能会导致安装程序要求在不同用户每次使用时重新安装产品。
注意
除非为组件设置了 Attributes 列中的可传递位,否则该组件在安装后仍保持启用状态,即使 Condition 列中的条件语句后来在产品的维护安装中计算结果为 False,也是如此。
在大多数情况下,如果应用程序包含可传递组件,Windows Installer 就需要使用应用程序的源来修复或升级应用程序。 在这些情况下,原始设备制造商提供的系统还原 CD-ROM 不起作用,需要提供应用程序的实际安装源。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈