Noa*_*oam 3 windows-installer installshield version
我有一个Installshield项目.
我加了一个重大的升级项目和改变Product version,Product code和Package code.
使用新安装程序安装后,旧版本仍然存在(中Add / Remove)
我认为这与我的旧版本编号是1.0.4.23新版本的事实有关1.0.4.24- 这是一个问题吗?主要升级是否忽略版本属性中的这么小的变化?
在主要升级common选项卡中我选择了Any earlier version
我记得多年前做的版本号1.1和1.2一切都很好,这是我怀疑当前问题与版本号有关的主要原因.
我认为这与我的旧版本号是1.0.4.23而新版本是1.0.4.24这一事实有关 - 这是一个问题吗?主要升级是否忽略版本中的这么小的变化?
是的,只有版本号的前三个字段对于主要升级才有意义.第四个字段被忽略了.
这在主要升级MSDN页面的说明中说明.
如果要触发主要升级,则新版本号必须为1.0.5.0或更高.
编辑:
正如Christopher Painter所指出的那样:
如果你必须使用所有四个字段,有一种解决方法.您可以创建一个自定义操作来执行您自己的FindRelatedProducts实现,并使用RemoveExistingProducts然后处理的ProductCode设置action属性.
自定义操作可以像这样实现:
MsiGetProperty获取产品的UpgradeCode.MsiEnumRelatedProducts()枚举与您的产品具有相同UpgradeCode的所有产品.MsiQueryProductState()以验证返回的产品是否MsiEnumRelatedProducts()已实际安装.我遇到了一些MsiEnumRelatedProducts()不再安装退回的孤立产品的情况.因此,通过仔细检查安装状态,代码将更加健壮MsiQueryProductState().MsiGetProductInfo()与INSTALLPROPERTY_VERSIONSTRING作为参数szProperty参数查询已安装的产品的版本.不要使用INSTALLPROPERTY_VERSION,因为INSTALLPROPERTY_VERSION只从版本号的前三个字段派生,我们要避免的问题.MsiSetProperty()将ActionProperty设置为该产品的ProductCode,RemoveExistingProducts然后对其进行操作.