我目前正在尝试了解Windows Installer ProductCode与Version属性之间的关系。
据我了解到目前为止我所见的examples,ProductCode表示特定版本,因此增加版本也应更改产品代码。 (事实上,上面的例子使用Product Id='*'
)。
为了更好地理解这一点,我问自己是否有任何场景会使ProductCode保持不变但增加Version
?如果安装了具有不同ProductCode(但是相同的UpgradeCode)的前一个MSI,那么Windows Installer会对这样的MSI做些什么呢?
我想另一个令我困惑的变化是:如果我只是想做"重大升级" Id='*'
是否有意义,或者我必须以某种方式控制ProductCode? p>
答案 0 :(得分:2)
如果您要使用更新的文件重建MSI文件并增加ProductVersion,那么您可以使用REINSTALL = ALL REINSTALLMODE = vomus(通常)命令行安装一个次要更新,以更新现有的产品。这很少见,IMO。
如果您没有使用该命令行,那么您将获得“已安装此产品的另一个版本”消息(如果新的MSI的软件包代码是新的,应该是这样)。
如果您只进行主要升级,那么每次都需要一个新的ProductCode,并在前3个字段中的某处增加ProductVersion。
答案 1 :(得分:2)
IMO:
1)MSI SDK doco写得不好。它以迂回的方式讨论该主题,但没有实际解释您的选择。
2)绝大多数MSI开发人员应该使用主要升级,在WiX中意味着Id =“*”,撞击ProductVersion中的前3个字段之一并创建一个MajorUpgrade元素。
3)次要升级非常严格且容易出错。在决定是否需要进行次要升级之前,您应该是MSI的专家,并且理解它和组件规则。换句话说,你会知道什么时候该。
进行重大升级时的FWIW“UpgradeCode”更像是一个ProductCode,因为它是静态的。将UpgradeCode视为一系列产品,而您的ProductCode总是在变化,不是因为它是一种新产品,而是因为MSI说您必须更改它才能进行重大升级。
软件从构建到构建这么多天进行了重构,功能变化如此之少,以及主要,次要和“小”的整个描述(总是不喜欢那个......谁在不改变版本号的情况下发布产品? ?)毫无意义。