阻止在较新版本上安装旧包

如果用户已安装较新版本,则可以编写 Windows Installer 升级包以阻止安装重大升级。 本主题中的过程只能防止可能是由于运行重大升级包而导致的降级。 此过程依赖于 FindRelatedProducts 操作,该操作仅在首次安装期间运行,不会在维护模式下运行(重新安装)。 因为次要升级是使用重新安装执行的,所以此过程不能用于确定次要升级包是否正在尝试降级应用程序。 有关详细信息,请参阅为应用程序将来的主要升级做好准备

阻止在较新版本上安装旧包

  1. 在升级表的 Upgrade Table 列中,输入有资格接收此升级的相关产品组的 UpgradeCode 属性。

  2. Upgrade 表的 Attributes 列中输入 MSIDBUpGradeAttributesOnlyDetect 位标志。

  3. Upgrade 表的 VersionMin 列中输入此包提供的升级的版本。 将 VersionMax 列留空。

  4. Upgrade 表的 ActionProperty 列中,输入将由 FindRelatedProducts Action 操作设置的属性的名称。

  5. SecureCustomProperties 属性和 Upgrade 表的 ActionProperty 列中指定的属性添加到 Property 表中。

  6. InstallExecuteSequence 表中的 FindRelatedProducts 操作后添加自定义操作类型 19。 在 CustomAction 表中包括此操作的记录,并输入要在“Target”列中显示的文本。 安装程序中内置了类型 19 自定义操作,因此无需编写代码。

  7. InstalleXecuteSequence 表中包含自定义操作类型 19 的记录的 Condition 列中,输入 ActionProperty 的名称。 这将导致仅当 Upgrade 表检测到已安装较新版本时才会执行自定义操作。

    例如,将一组相关产品升级到 3.0 版的 Windows Installer 包可能在其 UpgradeCustomActionInstalleXecuteSequenceProperty 表中包含以下记录。 组中的所有相关产品具有相同的 UpgradeCode,但如果计算机上已安装高于 3.0 的版本,则安装程序不会安装此升级包。 在这种情况下,安装程序会显示一条错误消息,并且安装失败。 在版本 1.0 和 2.0 上安装版本 3.0 升级包。

    Upgrade 表

    UpgradeCode VersionMin VersionMax 语言 特性 删除 ActionProperty
    {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} 3.0   msidbUpgradeAttributesOnlyDetect NEWPRODUCTFOUND
    {E7BE6D45-49FF-4701-A17E-BDCC98CE180D} 1.0 3.0 msidbUpgradeAttributesVersionMinInclusive UPGRADEFOUND

     

    CustomAction 表

    操作 类型 目标
    CA1 19 已安装更高级别的升级。

     

    InstallExecuteSequence 表

    操作 条件 序列
    FindRelatedProducts 200
    CA1 NEWPRODUCTFOUND 201

     

    Property 表

    属性 “值”
    SecureCustomProperties NEWPRODUCTFOUND;UPGRADEFOUND