electron-vue + electron-updater 实现自动更新(全量更新)
- npm 安装 electron-updater@4.0.0 版本 注意 4.0.0版
- 先打包一次,把打包下的win-unpacked/resources/app-update.yml 的内容复制一份,在main下边新建default-app-update.yml 然后粘贴内容。
- 将main/index.js 的新建的BrowserWindow 对象 导出,修改代码中 mainWindow 为你导出的名字。
- 在packjson 中,配置更新地址:(把地址替换成你自己的服务器地址,该地址下放的是 打包后的安装包 和 latest.yml 文件)
"mac": {"icon": "build/icons/icon.icns","publish": [{"provider": "generic","url": "https://www.*******/mac/"}]},"win": {"icon": "build/icons/256x256.png","publish": [{"provider": "generic","url": "https://www.*******/win/"}]},
- 在main下边新建 update.js 文件,下边是代码:
import { autoUpdater } from "electron-updater"
import { ipcMain } from "electron"
import { mainWindow } from "./index.js"// 更新
function handleUpadate(){// 定义更新版本的几种状态const returnData = {error: { status: -1, msg: '检测更新查询异常' },checking: { status: 0, msg: '正在检查应用程序更新' },updateAva: { status: 1, msg: '检测到新版本,正在下载,请稍后' },updateNotAva: { status: -1, msg: '您现在使用的版本为最新版本,无需更新!' }}// 如果是开发版调试需要准备工作:// 1. 将打包后的 win-unpacked下的 app-udate.yml的内容复制,在main下新建default-app-update.yml文件,粘贴内容// 2. 指定版本为 0.0.1 版,因为在开发环境下,electron-update会读取 electron的版本if(process.env.NODE_ENV === 'development'){autoUpdater.updateConfigPath = require('path').join(__dirname, 'default-app-update.yml')autoUpdater.currentVersion = "1.0.0"}else{autoUpdater.updateConfigPath = require('path').join(__dirname, '../../../app-update.yml')}// 设置更新地址let feedurl = 'https://www.*******/win/'if(process.platform == 'darwin'){feedurl = 'https://www.*******/mac/'}autoUpdater.setFeedURL(feedurl)// 更新错误autoUpdater.on('error',function(error){sendUpdateMessage(returnData.error)})// 检查中autoUpdater.on('checking-for-update',function(){sendUpdateMessage(returnData.checking)})// 发现新版本autoUpdater.on('update-available',function(info){sendUpdateMessage(returnData.updateAva)})// 当前版本为最新版autoUpdater.on('update-not-available',function(info){sendUpdateMessage(returnData.updateNotAva)})// 正在更新下载,返回进度autoUpdater.on('download-progress', function(progressObj){mainWindow.webContents.send('downloadProgress', progressObj)})// 下载完成,给主进程绑定isUpdateNow 事件,用户选择安装可以(调用isUpdateNow方法)autoUpdater.on('update-downloaded', function (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) {ipcMain.on('isUpdateNow', (e, arg) => {//autoUpdater.quitAndInstall()方法,可实现立即关闭程序并安装autoUpdater.quitAndInstall();});})// 执行更新检查,将执行上边你的各项更新配置autoUpdater.checkForUpdates()// 应用在关闭后自动安装(默认是false)autoUpdater.autoInstallOnAppQuit = true
}// 发送给renderer进行,更新状态
function sendUpdateMessage(text){mainWindow.webContents.send('message',text)
}export { handleUpadate }
- 在index.js 中引入,并绑定事件。
import { ipcMain } from 'electron'
import { handleUpadate } from './update.js'ipcMain.on('updateClient',function(){handleUpadate()
})
- 在你需要更新的页面中,执行主进程的 updateClient事件。
// 获取客户端版本信息getClientAva(){// 使用主进程获取更新this.$electron.ipcRenderer.send('updateClient')// 获取主进程返回的检测或更新状态this.$electron.ipcRenderer.on('message',(event,data)=>{switch(data.status){case -1:console.log(data.msg)breakcase 0:console.log(data.msg)breakcase 1:console.log(data.msg)this.isShowUpdate = truebreak}})// 更新时,获取更新进度this.$electron.ipcRenderer.on('downloadProgress',(event,data)=>{this.percent = (data.percent).toFixed(2)+''if(data.percent >= 100){this.isShowUpdate = false}})}
- 最终效果:
触发 getClientAva方法,执行更新检查。
在有新版本时执行全量下载
应用关闭后,自动安装最新版(如需用户手动安装,自己调用isUpdateNow 事件 就行)
以上均在 window 上实践完成,mac版更新应用可能需要签名证书的问题(待实践),增量更新(待续…)
electron-vue + electron-updater 实现自动更新(全量更新)相关推荐
- Solr的增量更新和全量更新对比
Solr的增量更新和全量更新 solr的简介 solr是一个采用java语言,基于Lucene的全文搜索引擎. solr的一些原理 solr通过数据库的数据导入到索引库中,并且给数据创建相应的索引,用 ...
- sorl的全量更新与增量更新
solr 的全量更新与增量更新 solr的增量更新 全量更新 solr的增量更新 1.首先要弄懂几个必要的属性,以及数据库建表事项,和dataimporter.properties .data-con ...
- Android中的全量更新、增量更新以及热更新
在客户端开发过程中,我们可能会遇到这样一种需求:点击某个按钮弹出一个弹窗,提示我们可以更新到apk的某个版本,或者我们可以通过服务端接口进行强制更新.在这种需求中,我们是不需要通过应用商店来更新我们的 ...
- 基于间隔推送全量更新数据状态的设计方法
2019独角兽企业重金招聘Python工程师标准>>> 假如有个直播间,在数据有更新的时候,能及时反映在客户端上.通信方式来说,有两种: 1.拉取模式. 2.推送+拉取模式(或者纯推 ...
- 全量更新和增量更新_增量BIOS更新或直接更新到最新版本哪个更好?
全量更新和增量更新 There are few things as irritating as a Blue Screen of Death, but sometimes there is an ea ...
- MySQL 百万级/千万级表 全量更新
业务需求:今天从生成测试环境迁移了一批百万级/千万级表的数据,领导要求将这批数据进行脱敏处理(将真实姓名 .电话.邮箱.身份证号等敏感信息进行替换).迁移数据记录数如下(小于百万级的全量更新不是本文重 ...
- 亿级流量电商详情页系统实战-28.商品详情页结构分析、缓存全量更新问题以及缓存维度化解决方案
1.前言 实时性比较高的那块数据,比如说库存,销量之类的这种数据,我们采取的实时的缓存+数据库双写的技术方案,双写一致性保障的方案 实时性要求不高的数据,比如说商品的基本信息,等等,我们采取的是三级缓 ...
- bugly的全量更新与热更新
bugly开发文档地址:https://bugly.qq.com/docs/introduction/app-upgrade-introduction/?v=20180709165613: 我们在使用 ...
- Hive利用增量表更新全量表
需求 要求将只存在于u1而不存在于u2的的ID记录全部插入u2中,并用u1中的记录更新u2中相同ID的记录. 不要被题目误导了,这个应该先更新数据,然后再插入,不要被题目的顺序误导 数据源 drop ...
最新文章
- python中 pip的安装方法
- LeetCode 64最小路径和65有效数字66加一
- 《Hadoop大明白》【1】Hadoop的核心组件
- 用信号量锁定:一个例子
- Python3 基础学习笔记 C07【函数】
- spring-boot-1.4x后@ConfigurationProperties注解舍弃location
- Telnet FTP Xwindow
- 【转】为VS2005安装STLport
- 刘润:一个人优不优秀,就看这3件小事
- 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic
- 阿里云招聘----技术生态和技术战略专家
- ict中的it和ct_ICT.Social – IT专业人员的社交网络
- C#中的String编码转换 BIG5 转换 GB2312
- 视觉+机械手-delta并联机械手
- Cisco Packet Tracer 思科模拟器三层交换机配置
- Gradle 2.0 用户指南翻译——第二十三章. Java 插件
- java scp发送文件到服务器,Java实现往远程服务器传输文件
- idm老是下载到99多就停止了 idm下载中断后无法继续下载
- 微信小游戏颜色风暴自动化
- vue cli可视化面板运行serve报错:Error: Package exports for ‘D:\*******(路径)\node_modules\colorette‘ do not defi