一个桌面应用安装完成后马上弹出更新失败,关掉再打开却正常。这种现象不应直接被归为“更新服务器不稳定”。先问应用采用什么安装包,以及错误发生在安装后的哪一次启动,往往能让排查范围缩小。
Electron的autoUpdater文档在Squirrel.Windows部分说明,安装后立即启动会带有--squirrel-firstrun参数,此时安装机制会持有应用文件锁,锁释放前更新请求会失败。文档给出的处理思路包括识别这一参数而跳过首次检查,或者延后检查。[1] 这个说明针对Squirrel.Windows,不能用来解释所有Windows打包方式下的错误。
先做一张能区分阶段的记录
开发人员可以记录应用版本、安装包类型、是否首次启动、启动时间、发起检查时间和原始错误。记录时不要将下载失败、检查失败与安装失败都改写为同一句“更新失败”,因为这样会丢失事件顺序。也不要为了排查把访问凭据或完整个人目录上传到公共问题单。
一个可复现的比较过程是:在测试环境中分别记录刚安装后的启动与正常再次启动,保持版本和更新地址相同,再比较失败发生的位置。如果只有首次安装阶段不同,文件锁线索值得进一步核对;若再次启动仍失败,就不能只靠首次启动的解释结束调查。这里是排查路径建议,并不证明读者的故障已经被定位。
避免补偿逻辑反而制造重复请求
同一官方文档提示,重复调用checkForUpdates可能导致重复下载更新。[1] 因此,加入延迟或重试时,还要检查是否已有窗口事件、定时器或其他入口发起了同一次检查。让日志能识别每次调用来自哪里,比在多个地方同时增加重试更容易验证。
完成修复后,验收应覆盖首次安装、再次启动、确实无更新以及存在更新的场景,并保留实际结果。本文依据本次读取的官方文档解释一种特定机制,没有运行读者的应用,也不把一个延时参数当作适用于所有项目的最终修复。
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。