electron 电子自动更新程序未安装在OSx中

aiqt4smr  于 2022-12-16  发布在  Electron
关注(0)|答案(2)|浏览(226)

电子生成器版本:20.28.4
电子更新版本:3.1.2
针对OSx、Windows和Ubuntu构建
我正在尝试创建一个带有自动更新机制的电子应用程序。我遇到了一个自动更新的问题,特别是对于OSx。它在Linux和Windows上运行得很好(新版本是用autoUpdater.quitAndInstall()下载和安装的;或者当用户退出应用程序时)。然而,在OSX上,新版本会被下载,但从未安装过。
下载更新时触发的事件是这样一个,所以我确信更新实际上是下载的:

autoUpdater.on('update-downloaded', (ev, info) => {
    setImmediate(() => {
        let iChoice = dialog.showMessageBox({
            type: 'question',
            message: oTrad['on-update-downloaded'],
            buttons: [oTrad['quit_and_install'], oTrad['install_later']]
        });

        if (iChoice === 0) {
            setImmediate(() => {
                var browserWindows = BrowserWindow.getAllWindows();
                browserWindows.forEach(function(browserWindow) {
                    browserWindow.destroy();
                });
                autoUpdater.quitAndInstall();
            })
        }
    });
});

当用户点击“退出并安装”时,调用autoUpdater.quitAndInstall()应用程序实际上未关闭(在dock中仍然显示为打开),并且实际上从来没有重新打开它自己。如果我手动关闭它,然后再次启动它-〉更新下载会再次启动,就好像更新从来没有下载或安装在首位。我很困惑,因为这种机制在Linux上工作得很完美&Windows。
更新:
我发现我的问题与App Transport Security有关,它阻止了Mac上的更新,所以我在我的package.json中添加了一些配置来绕过它:

"extendInfo": {
  "NSAppTransportSecurity": {
    "NSAllowsArbitraryLoads": true
  }
}

我现在的问题是quitAndInstall()函数不起作用。只有当我实际关闭应用程序时,才下载并安装新版本。如果我调用quitAndInstall,我会有以下bug:
错误:没有可用的更新,无法退出并安装本机Squirell.Mac的代理服务器已关闭
先谢了

rkttyhzu

rkttyhzu1#

我在OSX上也遇到过类似的问题,我这样写就解决了。在退出之前,我强制关闭所有窗口

if (iChoice === 0) {
    setImmediate(() => {
        app.removeAllListeners("window-all-closed")
        autoUpdater.quitAndInstall(false)
    })
}
bvjxkvbb

bvjxkvbb2#

我在MacOS中遇到了同样的问题,我设法解决了它。下面是不工作的代码。

autoUpdater.on("update-downloaded", updateInfo => { autoUpdater.quitAndInstall(); })

它关闭了应用程序,但它再也没有重新启动它。所以我检查了电子应用程序的日志文件以及ShipIt,我意识到下载完成后,它会发送一个安装新应用程序的请求**(即使你没有调用quitAndInstall方法)。**
因此,为了解决这个问题,我只是退出了应用程序有点延迟,因为它似乎有某种种族问题在这里。

autoUpdater.on("update-downloaded", updateInfo => {
    setTimeout(() => {
        autoUpdater.quitAndInstall();
        app.exit();
    }, 10000);
})


我同时检查了ShipIt的日志,我看到它开始了安装过程,然后就重新启动了应用程序。所以如果你在Mac上,下载完成后尝试退出(而不是退出)。我的现在可以工作了。

相关问题