阻止在较新版本上安装旧包
如果用户已安装较新版本,则可以编写 Windows Installer 升级包以阻止安装重大升级。 本主题中的过程只能防止可能是由于运行重大升级包而导致的降级。 此过程依赖于 FindRelatedProducts 操作,该操作仅在首次安装期间运行,不会在维护模式下运行(重新安装)。 因为次要升级是使用重新安装执行的,所以此过程不能用于确定次要升级包是否正在尝试降级应用程序。 有关详细信息,请参阅为应用程序将来的主要升级做好准备。
阻止在较新版本上安装旧包
在升级表的 Upgrade Table 列中,输入有资格接收此升级的相关产品组的 UpgradeCode 属性。
在 Upgrade 表的 Attributes 列中输入 MSIDBUpGradeAttributesOnlyDetect 位标志。
在 Upgrade 表的 VersionMin 列中输入此包提供的升级的版本。 将 VersionMax 列留空。
在 Upgrade 表的 ActionProperty 列中,输入将由 FindRelatedProducts Action 操作设置的属性的名称。
将 SecureCustomProperties 属性和 Upgrade 表的 ActionProperty 列中指定的属性添加到 Property 表中。
在 InstallExecuteSequence 表中的 FindRelatedProducts 操作后添加自定义操作类型 19。 在 CustomAction 表中包括此操作的记录,并输入要在“Target”列中显示的文本。 安装程序中内置了类型 19 自定义操作,因此无需编写代码。
在 InstalleXecuteSequence 表中包含自定义操作类型 19 的记录的 Condition 列中,输入 ActionProperty 的名称。 这将导致仅当 Upgrade 表检测到已安装较新版本时才会执行自定义操作。
例如,将一组相关产品升级到 3.0 版的 Windows Installer 包可能在其 Upgrade、CustomAction、InstalleXecuteSequence 和 Property 表中包含以下记录。 组中的所有相关产品具有相同的 UpgradeCode,但如果计算机上已安装高于 3.0 的版本,则安装程序不会安装此升级包。 在这种情况下,安装程序会显示一条错误消息,并且安装失败。 在版本 1.0 和 2.0 上安装版本 3.0 升级包。
UpgradeCode VersionMin VersionMax 语言 特性 删除 ActionProperty {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} 3.0 msidbUpgradeAttributesOnlyDetect NEWPRODUCTFOUND {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} 1.0 3.0 msidbUpgradeAttributesVersionMinInclusive UPGRADEFOUND 操作 类型 源 目标 CA1 19 已安装更高级别的升级。 操作 条件 序列 FindRelatedProducts 200 CA1 NEWPRODUCTFOUND 201 属性 “值” SecureCustomProperties NEWPRODUCTFOUND;UPGRADEFOUND