增加版本但保持 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" 的整个描述(总是不喜欢那个……谁发布产品而不改变版本号???)毫无意义。
我目前正在尝试了解 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" 的整个描述(总是不喜欢那个……谁发布产品而不改变版本号???)毫无意义。