0

如果安装了同一产品的多个版本,是否可以使用属性来检查较新版本并添加条件消息并防止卸载?

  • 网站 1.0.0 - 基础文件(主要升级)
  • 网站 1.0.1 - 文件的小幅更新
  • 网站 1.1.0 - 基础文件(主要升级)

用例:WebSite 1.0.0 和 WebSite 1.0.1 都使用 MSI 包安装在网络服务器上。卸载 WebSite 1.0.0 时,如果存在较新版本,我需要能够防止这种情况。

我考虑过使用条件,但不确定这是否是最好的方法。

<Condition Message="Newer version of the product must be removed">
    Installed OR PRODUCTVERSION > 1.0.0
</Condition>

安装 WebSite 1.1.0 后,它将删除以前的版本,因为它具有所需的基本文件集。

4

2 回答 2

2

MajorUpgrade 元素使用 1 个属性处理所有这些。

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

如果您使用的是 IsWiX (CodePlex) 项目模板,则默认情况下这是开箱即用的。我们的想法是涵盖最常见的需求和用例,因此您甚至一开始都不知道自己遇到了问题。

于 2015-04-02T20:12:39.537 回答
1

如果您需要阻止手动卸载 1.0.0,那么您需要搜索(例如)仅存在于更高版本中的组件 ID,并且您需要知道它们在旧版本中是什么,以便旧版本版本可以预测未来。或者您需要更高版本来创建1.0.0可以提前知道并在卸载时搜索的注册表项。主要升级搜索将找不到任何内容,因为在卸载期间未运行主要升级 FindrelatedProducts 搜索。你需要一个搜索、组件、注册表或 1.0.0 知道将在更高版本中的东西。然后在启动条件下使用该属性来防止卸载。

另一种可能性是在升级代码上调用 MsiEnumrelatedProducts() 或等效项的自定义操作。这将返回一系列 ProductCode,您可以对其调用 MsiGetProductInfo() 来获取产品版本,然后检查任何相关的值。这样做的好处是,旧产品不需要提前知道注册表项或组件 ID,因为升级代码更可预测,并且它们更不可能在一系列产品中更改。

于 2015-04-06T17:03:12.963 回答