1. npm 安装 electron-updater@4.0.0 版本 注意 4.0.0版
  2. 先打包一次,把打包下的win-unpacked/resources/app-update.yml 的内容复制一份,在main下边新建default-app-update.yml 然后粘贴内容。
  3. 将main/index.js 的新建的BrowserWindow 对象 导出,修改代码中 mainWindow 为你导出的名字。
  4. 在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/"}]},
  1. 在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 }
  1. 在index.js 中引入,并绑定事件。
import { ipcMain } from 'electron'
import { handleUpadate } from './update.js'ipcMain.on('updateClient',function(){handleUpadate()
})
  1. 在你需要更新的页面中,执行主进程的 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}})}
  1. 最终效果:
    触发 getClientAva方法,执行更新检查。
    在有新版本时执行全量下载
    应用关闭后,自动安装最新版(如需用户手动安装,自己调用isUpdateNow 事件 就行)

以上均在 window 上实践完成,mac版更新应用可能需要签名证书的问题(待实践),增量更新(待续…)

electron-vue + electron-updater 实现自动更新(全量更新)相关推荐

  1. Solr的增量更新和全量更新对比

    Solr的增量更新和全量更新 solr的简介 solr是一个采用java语言,基于Lucene的全文搜索引擎. solr的一些原理 solr通过数据库的数据导入到索引库中,并且给数据创建相应的索引,用 ...

  2. sorl的全量更新与增量更新

    solr 的全量更新与增量更新 solr的增量更新 全量更新 solr的增量更新 1.首先要弄懂几个必要的属性,以及数据库建表事项,和dataimporter.properties .data-con ...

  3. Android中的全量更新、增量更新以及热更新

    在客户端开发过程中,我们可能会遇到这样一种需求:点击某个按钮弹出一个弹窗,提示我们可以更新到apk的某个版本,或者我们可以通过服务端接口进行强制更新.在这种需求中,我们是不需要通过应用商店来更新我们的 ...

  4. 基于间隔推送全量更新数据状态的设计方法

    2019独角兽企业重金招聘Python工程师标准>>> 假如有个直播间,在数据有更新的时候,能及时反映在客户端上.通信方式来说,有两种: 1.拉取模式. 2.推送+拉取模式(或者纯推 ...

  5. 全量更新和增量更新_增量BIOS更新或直接更新到最新版本哪个更好?

    全量更新和增量更新 There are few things as irritating as a Blue Screen of Death, but sometimes there is an ea ...

  6. MySQL 百万级/千万级表 全量更新

    业务需求:今天从生成测试环境迁移了一批百万级/千万级表的数据,领导要求将这批数据进行脱敏处理(将真实姓名 .电话.邮箱.身份证号等敏感信息进行替换).迁移数据记录数如下(小于百万级的全量更新不是本文重 ...

  7. 亿级流量电商详情页系统实战-28.商品详情页结构分析、缓存全量更新问题以及缓存维度化解决方案

    1.前言 实时性比较高的那块数据,比如说库存,销量之类的这种数据,我们采取的实时的缓存+数据库双写的技术方案,双写一致性保障的方案 实时性要求不高的数据,比如说商品的基本信息,等等,我们采取的是三级缓 ...

  8. bugly的全量更新与热更新

    bugly开发文档地址:https://bugly.qq.com/docs/introduction/app-upgrade-introduction/?v=20180709165613: 我们在使用 ...

  9. Hive利用增量表更新全量表

    需求 要求将只存在于u1而不存在于u2的的ID记录全部插入u2中,并用u1中的记录更新u2中相同ID的记录. 不要被题目误导了,这个应该先更新数据,然后再插入,不要被题目的顺序误导 数据源 drop ...

最新文章

  1. python中 pip的安装方法
  2. LeetCode 64最小路径和65有效数字66加一
  3. 《Hadoop大明白》【1】Hadoop的核心组件
  4. 用信号量锁定:一个例子
  5. Python3 基础学习笔记 C07【函数】
  6. spring-boot-1.4x后@ConfigurationProperties注解舍弃location
  7. Telnet FTP Xwindow
  8. 【转】为VS2005安装STLport
  9. 刘润:一个人优不优秀,就看这3件小事
  10. 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic
  11. 阿里云招聘----技术生态和技术战略专家
  12. ict中的it和ct_ICT.Social – IT专业人员的社交网络
  13. C#中的String编码转换 BIG5 转换 GB2312
  14. 视觉+机械手-delta并联机械手
  15. Cisco Packet Tracer 思科模拟器三层交换机配置
  16. Gradle 2.0 用户指南翻译——第二十三章. Java 插件
  17. java scp发送文件到服务器,Java实现往远程服务器传输文件
  18. idm老是下载到99多就停止了 idm下载中断后无法继续下载
  19. 微信小游戏颜色风暴自动化
  20. vue cli可视化面板运行serve报错:Error: Package exports for ‘D:\*******(路径)\node_modules\colorette‘ do not defi

热门文章

  1. Bootstrap-导航条-栅格系统-Carousel(轮播效果)-标签页
  2. 利用python实现计算不同长度蛋白质RMSD
  3. Java实现对数据库的查操作
  4. 常规卷积,DW卷积和PW卷积的区别
  5. Python生成词云的制作
  6. 设计模式-day05
  7. 字符串分割split()方法:将一个字符串通过指定的分隔符分割成若干子串
  8. Kaggle - Home Depot Product Search Relevance 基础篇
  9. 给大家分享一下从卷烟-电子烟-口含烟的发展过程
  10. Android直播头像动画,iOS 仿抖音直播头像缩放动画