如何查看/理解Windows Installer auto-rollback在升级中断场景下的执行行为?
如何查看/理解Windows Installer auto-rollback在升级中断场景下的执行行为?
兄弟太懂这种继承Wix安装包、还被QE追着查中断升级后异常状态的痛苦了!我之前处理过类似的Windows Installer回滚问题,给你几个实打实的排查方向,都是我踩过坑后总结出来的:
一、先搞到Windows Installer的详细执行日志
Windows Installer默认不会记录最详细的回滚过程,但你能轻松重现问题,那直接临时开启详细日志就好:
- 如果你是通过命令行触发升级的,直接加日志参数:
msiexec /i YourAppInstaller.msi /l*v "C:\temp\UpgradeDetailed.log",这里/l*v表示记录所有详细信息,包括回滚的每一步操作 - 如果是通过Wix的bootstrapper或者自动升级触发的,你可以通过组策略永久开启Windows Installer的详细日志:
- 打开组策略编辑器(
gpedit.msc) - 定位到计算机配置 -> 管理模板 -> Windows组件 -> Windows Installer
- 启用“启用详细日志记录”选项,设置日志级别为“完全”,日志路径可以指定到你容易找到的目录(比如C:\temp)
- 打开组策略编辑器(
等你重现重启中断的场景后,去日志里搜关键词 Rollback,就能找到回滚开始、执行的每个动作,甚至能看到哪些文件被回滚、哪些注册表项被恢复,还有可能找到回滚失败的具体原因。另外注意:重启后系统会继续完成回滚,这时候可能会生成新的MSI日志文件,一般在%temp%或者%windir%\temp目录下,文件名格式是MSIXXXX.log(XXXX是随机字符),按时间排序找最近的就行。
二、事件查看器里的Installer专属日志
你之前找Event Log没找到,大概率是没找对地方!Windows Installer有自己的专属日志通道,不是默认的“应用程序日志”里:
- 打开事件查看器
- 展开左侧的应用程序和服务日志 -> Microsoft -> Windows -> Installer
- 在这里你可以按时间筛选(你知道中断的大概时间范围,直接设置时间过滤就行),重点看这些事件ID:
- 1036:表示回滚操作开始
- 1040:安装/升级需要重启,系统计划了重启后的操作
- 1041:重启后的恢复/回滚操作开始执行
- 1035:安装/升级过程开始(用来定位中断前的操作)
- 1001:安装失败并触发回滚的事件
每个事件的详细描述里会包含安装包的ProductCode、回滚的阶段,甚至具体的动作失败信息,这些信息能帮你定位到回滚过程中哪一步出了问题,导致系统处于无效状态。
三、额外的小提示
- 如果你用的Wix有自定义的回滚动作,记得检查你的Wix代码里有没有给这些动作设置正确的回滚条件,有时候自定义动作没处理好,会和系统自动回滚冲突
- 重启后系统会自动触发“继续未完成的安装”,这个过程的日志也会被记录到上面说的MSI日志里,别漏了看这部分
备注:内容来源于stack exchange,提问作者JakeRobb




