You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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é

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 08:12:31