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

问题描述 投票:0回答:4

我有一个电子应用程序,它使用

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
的调用),并且它像宣传的那样工作,但是我想确保立即安装更新而不是等待用户退出靠自己。

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

electron nsis electron-builder electron-updater
4个回答
2
投票

问题原来是我用选项

closable: false
创建了窗口,阻止了自动更新程序关闭它。删除此设置后自动更新程序完美运行


1
投票

小问题:你用过吗 这个答案 使您的应用程序窗口关闭并最小化到托盘?

如果你这样做了,你应该

application.isQuiting = true
在打电话之前
autoUpdater.quitAndInstall();
否则
application.close()
功能几乎被
contextMenu
以外的任何地方阻止。


0
投票

我遇到了同样的问题,我做了很多 RnD。尝试了几天后,我发现自动更新程序没有问题,而是我在服务器上上传的文件名有问题。确保每个新版本的 exe 文件名都不同,否则自动更新后将无法安装。 例如。 setup_0.0.1.exe 比你的下一个版本文件应该是 setup_0.0.2.exe 确保更新 latest.yml 和 blockmap 文件中的文件名。


0
投票

兄弟,我在windows上遇到了同样的问题。每次更新到一半就突然退出。找了半天终于发现跟那个该死的安装包的名字有关系。记住artifactName后面一定要跟版本号,比如:

artifactName: '${productName}-${version}.${ext}'
,否则会出现这个问题。我的是正常的

© www.soinside.com 2019 - 2024. All rights reserved.