我正在执行次要升级,但它没有将文件更新为我的某个安装程序功能。它在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中不存在。
答案 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