electron-updater的quitAndInstall方法是否会触发安装进度事件?
核心结论
electron-updater 的 quitAndInstall() 方法不会触发任何安装进度相关事件,你无法在当前运行的Electron应用进程内获取到安装阶段的进度数据。
原理说明
调用 quitAndInstall() 后,Electron会立刻触发应用退出流程,你的主进程、渲染进程代码会全部终止运行。后续的版本安装操作完全交给操作系统层面的原生安装程序接管:
- Windows平台由打包生成的NSIS安装器执行
- macOS平台由Squirrel更新框架/挂载的DMG安装流程执行
- Linux平台由对应发行版的系统包管理器执行
在安装执行阶段,你的应用代码已经完全停止运行,electron-updater 本身也没有设计、暴露安装阶段的进度回调接口,官方文档没有相关能力说明就是因为该能力不存在。
你已经实现的
download-progress事件仅覆盖更新包下载阶段,和后续本地安装流程完全无关。
可落地的替代方案
如果需要向用户展示安装阶段进度,仅能通过以下两种路径实现,没有其他取巧方式:
- 自定义原生安装包界面:Windows平台可修改electron-builder的NSIS配置,通过自定义NSIS脚本调整安装器界面,直接在原生安装器中展示进度条,该进度由安装器原生渲染,不需要Electron侧写任何逻辑;macOS、Linux的默认安装流程自带系统级进度提示,不支持深度自定义为应用内样式
- 独立辅助更新进程:在调用
quitAndInstall()退出主应用前,启动一个独立的轻量辅助程序,由这个脱离主应用的进程监控安装器的执行状态、绘制进度提示界面,待安装完成后自动拉起新版本的Electron应用。该方案实现复杂度高,跨平台适配成本大,非强需求不推荐。
你现有实现的代码已经覆盖了更新检查、更新包下载的全流程逻辑,不需要再额外监听不存在的安装阶段事件:
const { autoUpdater } = require("electron-updater"); const updater = (mainWindow) => { autoUpdater.checkForUpdates(); autoUpdater.on("update-available", (data) => { mainWindow.webContents.send("update-available", data); }); ipcMain.handle("download-update", (event) => { autoUpdater.downloadUpdate(); }); autoUpdater.on("download-progress", (data) => { logger.info(data); mainWindow.webContents.send("download-progress", data.percent); }); autoUpdater.on("update-downloaded", (data) => { mainWindow.webContents.send("update-downloaded", data); }); ipcMain.handle("install-and-restart", () => { // 该方法调用后应用即退出,无后续进度事件可监听 autoUpdater.quitAndInstall(false, true); }); };
内容的提问来源于stack exchange,提问作者Jeandré
相关产品推荐
相关产品推荐

