电子生成器版本: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上完美运行。
更新:
我发现我的问题与App Transport Security有关,因为它阻止了Mac上的更新,所以我在package.json中添加了一些配置来绕过:
"extendInfo": {
"NSAppTransportSecurity": {
"NSAllowsArbitraryLoads": true
}
}
我现在的问题是quitAndInstall()函数不起作用。只有在我实际关闭应用程序时才下载并安装新版本。如果我调用quitAndInstall,我将有以下错误:
错误:无可用更新,无法退出并安装本机Squirell.Mac的代理服务器已关闭
提前致谢
我为OSX遇到了类似的问题,我解决了这个问题。在退出之前我强制关闭所有窗口
if (iChoice === 0) {
setImmediate(() => {
app.removeAllListeners("window-all-closed")
autoUpdater.quitAndInstall(false)
})
}