windows - 禁用已安装程序的 MSI 自动修复
问题描述
我已经看到很多人发布了有关此问题的帖子,但尚未找到解决方案。我有一个程序,每隔一段时间就会出现一个问题,Windows 安装程序会尝试修复程序,但它实际上并没有做任何事情,它只是挂起。我检查了 Windows 事件日志,它说丢失的文件没有丢失。有时重新启动会修复它。
如何在已安装的程序上完全禁用自我修复而不将其从注册表中完全删除?以及如何防止将来的安装出现此问题?谢谢
解决方案
英特尔:您能否总结一下这是一个什么样的应用程序?它有 COM 组件吗?它是否具有 GAC 安装功能?它有服务吗?它有很多注册表信息吗?是你自己的包还是第三方包?ETC...
自我修复:这是一个大问题,但却是一个简单的问题。最简洁的解释可能是这样的:如果我删除文件,为什么 MSI 安装程序会重新配置?(推荐的)。
本质上:Windows Installer 尝试维护最初安装的文件。
外部原因:自我修复通常有 3 个主要原因:1)
设计错误的 MSI 程序包存在设计缺陷、2)
外部原因的干扰,从恶意软件、管理脚本到系统上任何改变“某些东西”的东西——真的,以及3)
触发的 Windows 设计更改旧包中的意外错误。
更多内容请参见:“自我修复的主要原因”。鉴于您的问题的间歇性,它可能是安全软件问题?
空白 GUID:有一种方法可以通过具有空白 GUID 的组件安装文件。然后它们被简单地安装并且不再检查。这应该可以消除自我修复问题,但这也意味着文件永远不会被更新。
其他“解决方案”:您不得尝试禁用 Windows Installer 服务或类似的东西来解决此问题,请尝试以下实用建议:自我修复 - 寻找实际解决方案(第 5 节)。例如,您可以使用非广告的快捷方式,解决 COM 注册问题等......关于这个问题还有这篇文章:如何避免使用我的 WiX / MSI 包触发 MSI 自我修复?(推荐的)。
自我修复详细信息:比任何人都想知道的自我修复更多。这是我之前创建的一个部分,包括它的“一目了然”:
- 自我修复 - 解释
- 自我修复 - 寻找现实世界的解决方案(第三方包)
- 自修复——如何在自己的包中避免(自己的包)
链接:
推荐阅读
- sql - Oracle JSON_OBJECT NULL ON NULL 子句不起作用
- ios - 如何在调用 API 时向 APNS 发送推送证书?
- javascript - 保存数据失败。node.js 中的验证失败
- regex - 将字符串附加到片段中的单词
- python - 如何使用 spacy 对 CSV 文件进行名称实体识别
- scala - Option 类中的 foldLeft/foldRight 和 fold 来自哪里?
- php - 我正在使用产生 xml 结果的 REST API。有一个节点叫做zone。如何使用 php 更改节点的值?
- python - 用回溯改变 n 个皇后问题
- spring - 不同的开发和生产环境生产日志,什么时候不应该
- spring - 使用 Spring Data MongoTemplate 按日期过滤