electron 在Windows上安装更新时,电子自动更新静默失败

eyh26e7m  于 2023-01-28  发布在  Electron
关注(0)|答案(3)|浏览(383)

我有一个电子应用程序,使用electron-builder构建, Package 和发布应用程序。
我有以下自动更新代码:

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的调用),它像广告中说的那样工作,但是我希望确保立即安装更新,而不是等待用户自己退出。
我怎样才能进一步调试它?为什么我没有看到任何错误?我应该在哪里查找它们?我做错了什么?

lfapxunr

lfapxunr1#

问题是我创建的窗口带有closable: false选项,阻止了自动更新程序关闭它。删除此设置后,自动更新程序工作正常

yjghlzjz

yjghlzjz2#

快速提问:您是否已使用this answer关闭应用程序窗口并将其最小化至托盘?
如果你这样做了,你应该在调用autoUpdater.quitAndInstall();之前application.isQuiting = true,否则application.close()函数在contextMenu之外的任何地方都会被阻塞。

a5g8bdjr

a5g8bdjr3#

我也面临着同样的问题,我做了很多RnD。尝试了几天后,我发现自动更新程序没有问题,而是我上传到服务器上的文件名有问题。请确保您的exe文件名为每个新版本是不同的,否则它不会在自动更新后安装。例如,setup_0.0.1.exe比您的下一个版本文件应该是setup_0.0。2.exe确保更新最新的.yml和块图文件中的文件名。

相关问题