电子生成器版本: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已关闭
预先感谢
答案 0 :(得分:1)
我在OSX上遇到了类似的问题,因此我写了解决它。在退出之前,我强制关闭所有窗口
if (iChoice === 0) {
setImmediate(() => {
app.removeAllListeners("window-all-closed")
autoUpdater.quitAndInstall(false)
})
}