首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >电子自动更新程序下载多个版本

电子自动更新程序下载多个版本
EN

Stack Overflow用户
提问于 2018-06-07 14:50:23
回答 1查看 1.5K关注 0票数 0

我正在使用electron-builderelectron-updater 道路更新我的应用程序。

场景:我的应用程序在启动时会在一分钟内检查更新。在此之后,它每5小时检查一次更新。下载新更新时,我不会强迫我的用户安装应用程序。相反,更新后的应用程序将在应用退出时开始安装。我只是告诉他们,“一个新的更新是可用的”与“安装现在”按钮,以便他们可以更新,如果他们想(使用quitAndInstall),或当他们退出应用程序或在下一个开始。

下面是一些与电子更新相关的查询。

  • 我注意到每次构建下载。假设一个更新是可用的,那么当一个应用程序打开时,就会立即开始下载新的更新。现在,一个新的应用程序没有安装,所以在5个小时后,它将再次检查新的更新。版本将不匹配,因此它开始再次下载更新,即使它已经下载。这是默认行为还是我遗漏了什么?我怎样才能阻止这种情况的发生?它使用和影响我的客户的数据和我的AWS带宽!
  • 下载更新时。在用户更新应用程序后,它的安装程序仍然可用,不被删除。(例如:-在1.0.0版上运行,更新2.0.0可用并下载,触发quitAndInstall并更新应用程序。安装程序-2.0.0.exe安装后仍在那里)。这是默认行为吗?它(或窗口)会在几天后删除这个下载的文件吗?

我已经搜索过这件事了,但到现在还没有运气!!下面是一些版本的详细信息。

electron : 2.0.2electron-builder : 20.15.1electron-updater : 2.21.10

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-15 07:00:21

这两个问题都在electron-builder: 2.17.0electron-updater: 2.23.0中得到了解决。

在调试了这么多代码之后。我找到了解决这两个问题的办法。

问题:多次下载

(用电子生成器: 2.16.0解决)

旧溶液

我发现,如果已经下载了安装程序,electron-updater:2.21.10已经有了停止再次下载的代码。但是,在某种程度上,使用fileinfo比较lodash的对象不起作用,这就产生了一个问题。所以在新版本中找到合适的解决方案之前。我已经更改了代码。

文件:- ..\node_modules\electron-updater\out\DownloadedUpdateHelper.js

代码语言:javascript
复制
return (0, _lodash().default)(_this.versionInfo, versionInfo) && (0, _lodash().default)(_this.fileInfo, fileInfo) && (yield (0, _fsExtraP().pathExists)(updateFile));

只需将(_this.fileInfo, fileInfo)更改为(_this.fileInfo.info, fileInfo.info)即可。详细信息可在这里获得:- https://github.com/electron-userland/electron-builder/issues/3003

注:-(我知道改变node_modules不是一个好办法,但这是我目前所能做的,以保持节目继续进行。)我也提交了公关申请,所以我所等待的只是一个合适的解决方案)

更新:- PR在电子生成器: 2.16.0中接受

问题:删除安装程序

(在电子生成器: 2.17.0中解决,检查问题#3000)

旧溶液

到目前为止,我发现没有任何内置的解决方案来删除安装程序,所以我已经创建了自己的解决方案来处理它。它可以通过

步骤1:-保存文件路径和新下载文件的版本到DB或文件中的某个位置作为JSON。

代码语言:javascript
复制
autoUpdater.on('update-downloaded', async (event) => {
    console.log("update-downloaded");
    let download_exe_obj = {path: autoUpdater.downloadedUpdateHelper._file, version: event.version};
    await update_downloaded_exe_data(download_exe_obj);// save download_exe_obj somewhere so that it can be used later on
});

步骤2:-在应用程序启动时使用保存的JSON检查当前的应用程序版本(createWindow)。如果我们发现应用程序版本与保存在json中的版本相同,那么我们可以删除以前下载的安装程序,因为安装程序已经安装好了。

代码语言:javascript
复制
const app = electron.app; //to get version and details from package.json
function createWindow() {
    mainWindow = new BrowserWindow({ width: 800, height: 600 })
    ...
    let available_exe_json = await get_downloaded_exe_data(); //get json from where you have saved
    if(available_exe_json != ''){
        let available_exe_obj = JSON.parse(available_exe_json);
        if (available_exe_obj.version != '' && available_exe_obj.version.toString() == app.getVersion().toString()) {
            //remove old installer
            if (available_exe_obj.path != '' && await fs.existsSync(available_exe_obj.path)) {
              await fs.unlinkSync(available_exe_obj.path);
              await update_downloaded_exe_data('');//update with blank where you have saved previous data
            }
        }
    }
}

我们还可以设法删除多个安装程序。有关此解决方案的更多详细信息可在这里找到:- https://github.com/electron-userland/electron-builder/issues/3000#issuecomment-396833579

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50744254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档