电子生成器版本: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的代理服务器已关闭
先谢了
2条答案
按热度按时间rkttyhzu1#
我在OSX上也遇到过类似的问题,我这样写就解决了。在退出之前,我强制关闭所有窗口
bvjxkvbb2#
我在MacOS中遇到了同样的问题,我设法解决了它。下面是不工作的代码。
它关闭了应用程序,但它再也没有重新启动它。所以我检查了电子应用程序的日志文件以及ShipIt,我意识到下载完成后,它会发送一个安装新应用程序的请求**(即使你没有调用quitAndInstall方法)。**
因此,为了解决这个问题,我只是退出了应用程序有点延迟,因为它似乎有某种种族问题在这里。
型
我同时检查了ShipIt的日志,我看到它开始了安装过程,然后就重新启动了应用程序。所以如果你在Mac上,下载完成后尝试退出(而不是退出)。我的现在可以工作了。