Electron应用通过auto-updater更新后仍加载旧版本问题求助
校验版本号读取逻辑
确保读取应用版本号的方式是调用app.getVersion(),或者读取打包后正确更新的package.json中的version字段,禁止使用硬编码的固定版本值。打包时要确认构建工具已将新版本号同步到输出文件中。检查更新安装路径
Windows默认路径为C:\Users\<用户名>\AppData\Local\<应用名>,macOS为/Applications/<应用名>.app,Linux为/opt/<应用名>。手动检查目标路径下的应用文件是否为新版本,确认更新包是否完整覆盖了旧文件。清理auto-updater缓存
auto-updater的缓存可能导致重启后误检测旧版本,可在应用启动时主动清理:const { autoUpdater } = require('electron-updater'); autoUpdater.clearCache();或在更新完成后调用
autoUpdater.removePendingUpdate()移除待处理更新记录。确认更新触发时机
避免在应用初始化阶段提前触发更新检查,应放在app.whenReady()之后执行:app.whenReady().then(() => { autoUpdater.setFeedURL({ provider: 'github', // 或你的更新源类型 repo: '你的仓库名', owner: '你的用户名' }); autoUpdater.checkForUpdates(); });使用官方重启方法
更新完成后必须调用autoUpdater.quitAndInstall()重启应用,禁止自定义重启逻辑,该方法会确保更新包生效后再重启:autoUpdater.on('update-downloaded', (info) => { dialog.showMessageBox({ type: 'info', title: '更新完成', message: '新版本已下载,重启应用生效', buttons: ['重启', '稍后'] }).then((result) => { if (result.response === 0) { autoUpdater.quitAndInstall(); } }); });验证安装包签名与完整性
Windows平台需确保安装包已正确签名,避免系统拦截导致更新不完整;macOS需开启硬化运行时并完成公证。以electron-builder为例,在package.json中配置:"build": { "win": { "certificateFile": "证书路径", "certificatePassword": "证书密码" }, "mac": { "hardenedRuntime": true, "entitlements": "entitlements.plist" } }检查更新源版本信息
确认更新源(如GitHub Releases)中的latest.yml/latest.json文件版本号与安装包版本完全一致,避免版本号不匹配导致重复检测更新。
内容的提问来源于stack exchange,提问作者santosh kumar

