次要升级失败
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
我正在执行小升级,但它没有将文件更新为我的安装程序功能之一。它在 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