在Windows上安装更新时,电子自动更新会以静默方式失败

时间:2019-09-27 01:52:59

标签: electron nsis electron-builder electron-updater

我有一个电子应用程序,它使用electron-builder来构建,打包和发布该应用程序。

我有以下自动更新代码:

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块还是autoUpdater.on("error")回调。

位置C:\Users\<User>\AppData\Local\<app-name>-updater有一个用于安装先前版本的installer.exe文件和一个包含用于新版本的安装程序的pending文件夹。手动执行此安装程序将导致该应用程序更新而没有错误。

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

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

2 个答案:

答案 0 :(得分:0)

快速提问:您使用过吗 this answer使您的应用程序关闭并最小化到托盘上?

如果您这样做了,应该application.isQuiting = true,然后再致电autoUpdater.quitAndInstall(); 否则,application.close()函数会在contextMenu以外的任何地方被阻塞。

答案 1 :(得分:0)

原来,问题是我创建了带有选项closable: false的窗口,从而阻止了自动更新程序将其关闭。删除此设置后,自动更新程序可以完美运行