增加版本但保持 ProductCode 不变?

Increasing Version but keeping ProductCode the same?

我目前正在尝试了解 Windows Installer ProductCode 和 Version 属性之间的关系。

据我了解examples到目前为止我所看到的,ProductCode表示一个特定的版本,所以增加版本也应该改变产品代码。 (实际上上面的例子使用了Product Id='*')。

为了更好地理解这一点,我问自己是否存在 任何 方案可以保持 ProductCode 不变但增加 Version?如果安装了具有不同 ProductCode(但相同的 UpgradeCode)的先前 MSI,Windows 安装程序会如何处理这样的 MSI?

我想我的困惑的另一个变化是:如果我只想做 "major upgrades" 是否 Id='*' 有意义或者我是否必须以某种方式控制 ProductCode?

如果您要使用更新的文件重建您的 MSI 文件并增加 ProductVersion,那么您有一个小的更新,您可以使用命令行 REINSTALL=ALL REINSTALLMODE=vomus(通常)安装,这将更新现有的安装的产品。这很少见,IMO。

如果您没有使用该命令行,您会收到 "another version of this product is already installed" 消息(如果包代码是新 MSI 的新代码,它应该是新的)。

如果您只进行重大升级,那么是的,您每次都需要一个新的 ProductCode,并在前 3 个字段中的某处增加 ProductVersion。

海事组织:

1) MSI SDK doco 写得不好。它以迂回的方式讨论该主题,而没有实际解释您的选择。

2) 绝大多数 MSI 开发人员应该使用 Major Upgrades,这在 WiX 中意味着 Id="*",在 ProductVersion 的前 3 个字段中添加一个并创建 MajorUpgrade 元素。

3) 小升级非常严格且容易出错。在决定进行次要升级之前,您应该是 MSI 方面的专家并且非常了解它和组件规则。换句话说,你会知道什么时候到了。

FWIW 在进行主要升级时 "UpgradeCode" 更像一个 ProductCode,因为它是静态的。将 UpgradeCode 视为一系列产品,您的 ProductCode 总是在变化,不是因为它是一个新产品,而是因为 MSI 说您必须更改它才能进行重大升级。

如今,软件从一个版本到另一个版本进行了如此多的重构,功能变化如此之小,以至于对主要、次要和 "small" 的整个描述(总是不喜欢那个……谁发布产品而不改变版本号???)毫无意义。