次要升级失败

Minor upgrade is failing

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

MSI (c) (88:64) [21:35:44:834]: Note: 1: 2262 2: Patch 3: -2147287038
MSI (c) (88:64) [21:35:44:834]: Machine policy value 'EnforceUpgradeComponentRules' is 0
MSI (c) (88:64) [21:35:44:834]: SELMGR: ComponentId '{A48DDBD3-3B28-F2FF-DBCE-0462EC330D7E}' is registered to feature 'Client', but is not present in the Component table. Removal of components from a feature is not supported!
MSI (c) (88:64) [21:35:44:834]: SELMGR: Removal of a component from a feature is not supported

我在制作升级安装程序时没有删除任何组件。我还检查了任何组件违规规则,但我没有。我不知道为什么会这样。因此,功能 'Client' 将进入 Advertise 状态。我还检查过我的 MSI 中不存在此组件。

动态 file/dependency 扫描因此确实与次要升级不兼容。小升级对他们的规则非常挑剔。如果您真的想保持动态,请考虑切换到 Major Upgardes。无论哪种方式,如果您坚持进行较小的升级,请始终使用 MSIENFORCEUPGRADECOMPONENTRULES=1 属性 设置测试您的安装程序。

至于您目前的情况,请在您的构建环境中创建一个同名的 0 字节文件,然后将其编写到 ISM 中,就像您在构建环境中看到的一样。说组件主键、文件主键、组件 ID (guid) 相同的功能……一切。现在将组件标记为可传递的(我认为它在 InstallShield 中被称为 reevaluate ..抱歉已经有一段时间了)并给它一个条件表达式,它将始终计算为 false,例如 GoAway=1.

现在您将通过次要升级规则,组件将 "punctured" 消失。

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

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

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