大话Electron应用自动更新

一、Windows下更新特有的问题

软件更新在Linux和macOS还好说,但是在Windows上可能会遇到UAC问题,常用的方法是:Windows计划任务、Windows Service,本质上这两种方式还是提权,Windows Service 与 Windows计划任务相比最大的特点就是可以与应用交互,Windows的更新就是使用Windows Update服务,即使在macOS的Edge浏览器也是使用的Microsoft Update服务。

二、手动更新

手动更新是下载完整的安装包,用户手动安装,如果数据需要保存在本地,那么不要将数据保存在应用安装目录,而是用户目录。

手动更新适合用户粘性高,非频繁更新的应用,在macOS的App Store中,通常只要上传安装包,用户终端可以自动更新。手动更新一般会有比较大的安装包,因为是完全下载。一般作为降级更新方案使用。

三、覆盖更新

程序自动替换,下载更新过程快,只需要重启应用,甚至不需要重启,但是容易出现写入文件失败,而且实现复杂,适合打补丁。

四、自动更新

应用程序自动下载,再次启动以后重新加载最新版本即可,一般这样的应用结构是由一个固定的应用启动程序读取不同的应用版本。

这样更新速度快,异步更新并且适合高频更新的应用。缺点就是实现有一定的难度。

五、Electron应用更新

(1)Web化

将业务视图存放到远程HTTPS服务器,这样对用户端无感知,但是导致应用无法离线使用,而且还要实现一堆框架兼容新问题,比如Electron的desktopCapture模块。

(2)官方自动更新

基于Squirrel框架完成自动更新,并且解决了权限问题。

(3)Updater

是Electron官方更新的改版实现,有electron-builder提供。

  • 支持Windows签名验证
  • 支持进度条
  • 基于electron-builder非常容易使用
  • 没有内置的Windows更新体验好
  • 在Windows上依旧存在权限问题

启动时会调用更新器,然后一键安装,等待更新完成后重启。

六、增量更新

只更新不同的地方,因此只提供差异包即可,体积视修改面积决定,常见的更新方案如下:

  • bsdiff、bspatch:在移动端很常用,适用于二进制文件,开源、免费
  • Xdelta3:适用于二进制
  • Courgette:Google提出的更新方案,是bsdiff和bspatch的优化
  • RTPatch:是商业方案

七、客户端灰度发布

控制发布风险,根据用户标签或者客户端特征进行,发布时出现用户体验问题进行回滚。

八、Electron更新服务器

Electron提供了几个更新服务器方案:

  • Hazel – 用于私人或开源应用的更新服务器,可以在 Now 上免费部署。 它从GitHub Releases中拉取更新文件,并且利用 GitHub CDN 的强大性能。
  • Nuts-同样使用GitHub Releases, 但得在磁盘上缓存应用程序更新并支持私有存储库.
  • electron-release-server – 提供一个用于处理发布的仪表板,并且不需要在GitHub上发布发布。
  • Nucleus – 一个由Atlassian维护的 Electron 应用程序的完整更新服务器。 支持多种应用程序和渠道; 使用静态文件存储来降低服务器成本.

但是最大的问题就是无法定制更新,因此我们可以自己实现更新服务。在更新方案中,客户端使用autoUpdater模块,但是Windows上依旧会存在一些问题,比如初次启动无法更新,Windows的更新一般是静态存储,可以将更新包存放到对象存储服务中,比如AWS S3。

autoUpdater是一个EventEmitter,提供一系列的事件,比如更细可用,更新下载完成等等。

Electron更新一直存在的问题:

  • 文档覆盖不全面
  • 包体积太大
  • 没有进度条

(1)macOS更新

响应内容:

{
  "url": "https://example.com/update/release/name-version-platform.zip",
    "name": "My release name",
    "notes": "Update Text",
    "pub_date": "2020年 4月 1日 星期三 20时23分02秒 CST"
}

响应状态码:

  • 204:没有内容,表示不需要更新

测试macOS下更新:

“钥匙串访问”-“证书访问”-“证书助理”-“创建证书”,选择自签名证书。创建完成后,双击证书,安装。

客户端代码逻辑:

const {autoUpdater} = require(‘electron‘);
autoUpdater.setFeedUrl(‘https://example.com/update/release/name-version-platform.zip‘);
autoUpdater.checkForUpdate(); // 检查更新
autoUpdater.quitAndInstall();      // 退出并安装更新

可以监听的事件:update-avliable、update-downloaded、error。

可以通过dialog模块通知用户是否更新:

dialog.showMessageBox();   // 显示信息
dialog.showOpenDialog();     // 打开对话框
dialog.showSaveDialog();      // 保存对话框

(2)Windows更新

响应内容:

包签名 name-version-full.nupkg Hash值

安装更新库:

sudo npm i electron-squirrel-startup --save

在打包Windows的时候,会创建3个文件:

  • 安装包
  • 更新包
  • RELEASE,该文件就是更新服务器的响应体

原文地址:https://blog.51cto.com/xvjunjie/2484067

时间: 2024-08-28 19:29:41

大话Electron应用自动更新的相关文章

【原创】从零开始搭建Electron+Vue+Webpack项目框架(五)预加载和Electron自动更新

导航: (一)Electron跑起来(二)从零搭建Vue全家桶+webpack项目框架(三)Electron+Vue+Webpack,联合调试整个项目(四)Electron配置润色(五)预加载及自动更新(六)构建.发布整个项目(包括client和web)(未完待续) 摘要:到目前为止,我们的项目已经具备了PC客户端该有的一些基础功能和调试环境,但是总感觉缺了灵魂,那就是结合实际项目.实际业务的细节处理,缺着吧...这篇文章就介绍一下预加载和自动更新,文字功底有限,如有介绍的不清楚的地方,欢迎留言

electron mac签名 - 针对electron-builder的自动更新

针对electron-builder的自动更新 配合自动更新 - 安装包签名(mac)(待补充) 前提:实现自动更新需要签名 一.本地开发调试mac签名(无需具有权限的appple账号) 打开xcode,xcode -> preference -> add new acount 登录apple账号(系统会生成默认开发证书) command+空格开启钥匙串访问 选择登录 - 我的证书 - 选择当前账号下的证书 sudo vim ~/.bash_profile // 添加 export CSC_L

在windows平台下electron-builder实现前端程序的打包与自动更新

由于8月份上旬公司开发一款桌面应用程序,在前端开发程序打包更新时遇到一些困扰多日的问题,采用electron-builder最终还是得到解决~ 以下是踩坑的过程及对electron打包与更新思路的梳理,electron打包与更新的正确姿势应该如下图所示 下面将逐一展开描述说明     一.windows系统下环境配置 NPM是随NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并安装别人编

electron-updater实现electron应用程序更新

使用electron开发桌面应用对于前端来说是比较新的领域.通常web端实现应用的更新比较简单,因为用户访问web端的网页都是通过浏览器访问,输入网址后,找到对应服务器的资源然后返回给用户,所以我们更新应用只需要替换服务器端的代码就可以.但是对于客户端,大多数资源都是在本地的,没有网络也是可以打开,只是和网络交互的接口没有数据而已. 所以桌面应用程序更新需要用户在应用开始时检测更新,用户决定是否更新替换当前应用. electron-updater实现应用更新的步骤: 1.npm install

Linux下搭建SVN服务器及自动更新项目文件到web目录(www)的方法

首先搭建SVN服务器 1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) sudo apt-get install subversion 2,创建版本库 svnadmin create /home/myrepos    //这里的文件目录自己随便设置 3,配置svnserve 上述版本库/home/myrepos建立后在文件夹下会生成conf文件夹,进入/home/myrepos/conf下面会有下面3个文件 authz passwd 

svn自动更新服务器最新代码

1.很简单打开dos界面 cd到svn exe目录下,运行 cd C:\Program Files\TortoiseSVN\bin    --svn安装目录(作者使用时TortoiseSVN客户端,其他客户端未测试过)start TortoiseProc.exe /command:update /path:"F:\_xxx_svn\branches\xxxxx" /closeonend:3 update是命令,/path后面是同步路径start TortoiseProc.exe /co

自动更新开奖数据的excel文件,供大家下载

自动更新开奖数据的excel文件,供大家下载 2010-03-14 20:22 228492人阅读打印来源:乐彩网 作者:eren 很多人拥有自制excel电子表格,常要更新最基本的开奖信息.如有多期未更新,则费时更多.乐彩网为大家提供八种彩票的自动更新文件,供下载.您只需点击更新按钮,就能得到最及时全面的开奖信息,省时省力. 2011年10月12日修改说明:已更新全部开奖数据.福彩3Dexcel文件中,因描述更新范围的高度小了,导致更新后,最下面内容会右移.如此文件单独存在,请直接下载.如已将

windows下svn自动更新

配置hooks下post-commit.bat文件,文件内容如下 @echo offSET REPOS=%1SET REV=%2SET DIR=%REPOS%/hooksSET PATH=%PATH%;SET WORKING=E:/EnvirOnment/WWW @网站根目录svn update %WORKING% --username eves_china --password test2015 注意: 1.svn服务器的程序bin目录需要加入path路径. 2.进入计算机服务-->>Vis

自动更新svn的内容到网站

每次编写网站代码,都是手工复制到服务器然后看效果,现在可以通过svn自动更新网站的代码,方法如下: 1.编写批处理 "C:\Program Files\Subversion\bin\svn.exe" export --force --no-auth-cache --quiet svn://xxxxxx [path] --username [username] --password [password] 相关参数说明: 1.C:\Program Files\Subversion\bin\