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

时间:2018-12-19 14:06:35

标签: electron auto-update

电子生成器版本: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()的“退出并安装”时,该应用程序实际上并没有关闭(在扩展坞中仍显示为打开状态),并且从未真正重新打开过。如果我手动杀死它,然后再次启动它->将再次触发已下载的更新,就好像从未下载或安装该更新一样。我很迷茫,因为这种机制在Linux和Windows上都能正常工作。

更新:

我发现我的问题与阻止Mac上更新的App Transport Security有关,因此我在package.json中添加了一些配置以绕过该问题:

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

我现在的问题是quitAndInstall()函数无法正常工作。仅当我实际上关闭该应用程序时,才下载并安装新版本。如果我调用quitAndInstall,将会遇到以下错误:

  

错误:没有可用的更新,无法退出并安装以下代理服务器   本地Squirell.Mac已关闭

预先感谢

1 个答案:

答案 0 :(得分:1)

我在OSX上遇到了类似的问题,因此我写了解决它。在退出之前,我强制关闭所有窗口

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