Windows installer 小升级失败

Windows installer 小升级失败,windows-installer,upgrade,installshield-2013,Windows Installer,Upgrade,Installshield 2013,我正在执行一个小升级,但它并没有将文件更新到我的安装程序功能之一。它在MSI日志中给出以下错误 MSI c 88:64[21:35:44:834]:注:1:2262:Patch 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-0462EC330D

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

MSI c 88:64[21:35:44:834]:注:1:2262:Patch 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}”是 已注册到功能“客户端”,但不在组件中 桌子不支持从功能中删除组件! 微星c 88:64[21:35:44:834]:SELMGR:从要素中删除组件 不支持


在进行升级安装时,我不会删除任何组件。我还检查了任何组件违反规则的情况,但我没有。我不知道为什么会这样。正因为如此,功能“客户端”正在进入广告状态。我还检查了我的MSI中不存在此组件。

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

至于您当前的情况,请在您的构建环境中创建一个同名的0字节文件,并将其编写到ISM中,就像您在构建环境中看到的一样。说出组件主键、文件主键、组件ID guid相同功能。。。每件事现在将组件标记为可传递,我认为它在InstallShield中称为重新评估。。抱歉,已经过了一段时间,请给它一个条件表达式,该表达式的计算结果将始终为false,例如GoAway=1

现在您将通过小升级规则,组件将被刺穿并离开

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

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


有没有可能该组件不是您直接编写的,而是通过动态文件链接等其他方式在构建时添加的。?在基本包.msi中查找该组件以确定它是什么。始终查看构建的msi而不是ism,以了解其中真正包含的内容。@MichaelUrman:不。我们不是在构建时添加该组件。@ChristopherPaint:我比较了先前版本的msi和我要升级的最新msi,发现该组件的密钥文件已从动态位置删除,因为在较新版本中不再使用。但当我研究旧版本的ISM时,我并没有找到那个组件,但在那个版本的MSI中我可以看到它。为什么会这样?我得到了为什么我可以在MSI中看到而不是在ISM文件中看到该组件的原因。因为它是一个动态文件链接,在构建时,它正在为这些文件创建一个组件。