在 Windows 上安装更新时,Electron 自动更新失败

标签 electron nsis electron-builder electron-updater

我有一个使用 electron-builder 的 Electron 应用程序用于构建、打包和发布应用。

我有以下自动更新代码:

autoUpdater.logger = log;
autoUpdater.logger.transports.file.level = "info";
autoUpdater.autoDownload = true;

const updateCheck = () => {
  autoUpdater.checkForUpdates().then(resp => {
    log.info("autoUpdate response:");
    log.info(resp);
  });
};

app.on("ready", async () => {
  log.info(`Version: ${app.getVersion()}`);

  autoUpdater.on("update-downloaded", () => {
    log.info("update downloaded");
    setImmediate(() => {
      try {
        log.info("installing update");
        // app.relaunch();
        autoUpdater.quitAndInstall();
      } catch (err) {
        log.error("Error installing update");
        log.error(err);
      }
    });
  });

  autoUpdater.on("error", err => {
    log.error("AutoUpdater error");
    log.error(err);
  });

  updateCheck();

  schedule.scheduleJob("*/10 * * * *", updateCheck);
});

当我发布新版本时,自动更新程序检测到它,成功下载它,然后尝试安装它。

在安装更新过程中,进度条会填满一半,然后消失。

应用程序保持关闭状态,并且在进度条消失后不会自动重新启动。

当我手动重新启动它时,它仍然是旧版本。它检测到有一个已经下载的更新,并尝试安装它,结果相同(进度条填充一半然后消失,之后应用程序保持关闭状态)。

我的日志文件没有显示来自 catch block 或 autoUpdater.on("error") 的错误回调。

地点C:\Users\<User>\AppData\Local\<app-name>-updater有一个 installer.exe安装以前版本的文件,以及一个 pending包含新版本安装程序的文件夹。手动执行此安装程序会导致应用更新而不会出现错误。

我尝试使用 checkForUpdatesAndNotify 进行测试而不是 checkForUpdates (并注释掉对 quitAndInstall 的调用),并且它像宣传的那样工作,但是我想确保立即安装更新,而不是等待用户自行退出。

我该如何进一步调试呢?为什么我没有看到任何错误?我应该在哪里寻找它们?我做错了什么?

最佳答案

问题原来是我用选项 closable: false 创建了窗口,阻止了自动更新程序关闭它。删除此设置后,自动更新程序将完美运行

关于在 Windows 上安装更新时,Electron 自动更新失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58126745/

相关文章:

event-handling - 在Vue组件中监听Electron的ipcRenderer消息

reactjs - 使用文件协议(protocol)在本地访问 react 路由器路由?

java - NSIS 设置默认程序来启动指定的文件类型

windows - 如何为 Windows 或 Mac 或 Linux 系统发布 Electron 应用程序?

npm - 'build' 不被识别为内部或外部命令 - 使用 ElectronJS/electron-builder

Electron 应用程序 Mac 应用程序商店图标问题 -> "missing required icon"

javascript - 如何通过Electron应用程序在Chrome中打开链接?

javascript - ElectronJS/OSX - 使用我的应用程序打开文件,如何使用 Apple 事件?

python - 如何使用Pynsist在python中安装numpy

nsis - 通过NSIS安装时如何使用后台进程安装jre?