次要升级失败

时间:2017-07-23 07:27:39

标签: windows-installer upgrade installshield-2013

我正在执行次要升级,但它没有将文件更新为我的某个安装程序功能。它在MSI日志中给出以下错误。

  

MSI(c)(88:64)[21:35:44:834]:注意:1:2262 2:补丁3:-2147287038
  MSI(c)(88:64)[21:35:44:834]:机器政策价值   ' EnforceUpgradeComponentRules'是0
  MSI(c)(88:64)[21:35:44:834]:   SELMGR:ComponentId' {A48DDBD3-3B28-F2FF-DBCE-0462EC330D7E}'是   注册到功能'客户端',但不在组件中   表。不支持从功能中删除组件!
  MSI(c)   (88:64)[21:35:44:834]:SELMGR:从特征中删除一个组件   不支持

我在制作升级安装程序时没有删除任何组件。我还检查了任何组件违规规则,但我没有。我不知道为什么会这样。因此,功能'客户端'正在广告状态。我还检查了这个组件在我的MSI中不存在。

1 个答案:

答案 0 :(得分:1)

由于这个原因,动态文件/依赖项扫描实际上并不与次要升级兼容。次要升级对他们的规则非常挑剔。如果你真的想保持动态考虑切换到Major Upgardes。无论哪种方式,如果您坚持使用次要升级,请始终使用MSIENFORCEUPGRADECOMPONENTRULES = 1属性设置测试您的安装程序。

就您当前的情况而言,在您的同名构建环境中创建一个0字节文件,并将其创建到ISM中,就像您在构建环境中看到的那样。说组件主键,文件主键,组件ID(guid)相同的功能......一切。现在将组件标记为可传递(我认为它在InstallShield中称为reevaluate ..对不起它已经有一段时间了)并给它一个条件表达式,它总是会被评估为false,例如GoAway = 1.

现在,您将通过次要升级规则,该组件将被“删除”"然后离开。

但我希望你能看到这只是一个补丁。使用您当前的策略可以轻松再次发生这种情况。我强烈建议改变它。

这是我10年前写的一篇文章,适用于此:

http://blog.iswix.com/2007/06/dealing-with-very-large-number-of-files.html