我有一个 Installshield 项目。
我添加了一个主要的升级项目并进行了更改Product version
, Product code
and Package code
.
使用新安装程序安装后,旧版本仍然存在(在Add / Remove
)
我认为这与我的旧版本号有关1.0.4.23
新的是1.0.4.24
- 这是一个问题吗?重大升级会忽略版本属性中如此小的变化吗?
重大升级中common
我选择的选项卡Any earlier version
我记得几年前用版本号做过这个1.1
and 1.2
一切都很好,这就是我怀疑当前问题与版本号有关的主要原因。
我认为这与我的旧版本号有关
1.0.4.23,新版本是 1.0.4.24 - 这是一个问题吗?重大升级会忽略版本中如此小的变化吗?
是的,只有版本号的前三个字段对于主要升级很重要。第四个字段被简单地忽略。
这是在注释中说明的主要升级 MSDN 页面 https://msdn.microsoft.com/en-us/library/windows/desktop/aa369786(v=vs.85).aspx.
如果您想触发重大升级,您的新版本号必须是1.0.5.0
或更大。
Edit:
正如克里斯托弗·佩因特指出的:
如果您必须使用所有四个字段,则有一种方法可以解决此问题。你可以
创建一个自定义操作来执行您自己的实现
FindRelatedProducts 并使用 ProductCode 设置操作属性
然后,RemoveExistingProducts 将对其进行操作。
自定义操作可以这样实现:
- Call MsiGetProperty https://msdn.microsoft.com/en-us/library/windows/desktop/aa370134(v=vs.85).aspx得到升级代码您的产品。
- Call MsiEnumRelatedProducts() https://msdn.microsoft.com/en-us/library/windows/desktop/aa370103(v=vs.85).aspx枚举具有相同的所有产品升级代码作为您的产品。
- Call MsiQueryProductState() https://msdn.microsoft.com/en-us/library/windows/desktop/aa370363(v=vs.85).aspx验证退回的产品
MsiEnumRelatedProducts()
已实际安装。我经历过一些案例MsiEnumRelatedProducts()
退回不再安装的孤立产品。因此,通过双重检查安装状态,代码将更加健壮MsiQueryProductState()
.
- Call MsiGetProductInfo() https://msdn.microsoft.com/en-us/library/windows/desktop/aa370130(v=vs.85).aspx with
INSTALLPROPERTY_VERSIONSTRING
作为论证szProperty
参数来查询已安装产品的版本。不要使用INSTALLPROPERTY_VERSION
相反,因为INSTALLPROPERTY_VERSION
仅从版本号的前三个字段派生,这是我们要避免的问题。
- 比较版本号时,请确保不只是比较字符串,而是比较将字符串解析为由“.”分隔的字段并单独比较字段 https://stackoverflow.com/q/2941491/7571258.
- 如果您找到想要更换的匹配产品,请致电MsiSetProperty() https://msdn.microsoft.com/en-us/library/windows/desktop/aa370391(v=vs.85).aspx设置动作属性 https://msdn.microsoft.com/en-us/library/windows/desktop/aa372379(v=vs.85).aspx to the 产品代码该产品的RemoveExistingProducts https://msdn.microsoft.com/en-us/library/windows/desktop/aa371197(v=vs.85).aspx然后采取行动。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)