当前位置: 首页 > news >正文

超详细!!!electron-vite-vue开发桌面应用之应用更新版本提示(十三)

云风网
云风笔记
云风知识库

当项目应用包更新后应该主动提示用户更新,这是采用electron-updater进行更新提示

一、安装依赖

npm i electron-updater  

二、配置安装包更新地址

electron-builder.json5添加配置

// 配置安装包更新地址publish: [{provider: "generic",url: "http://www.niech.cn/everyDayNote",},]

三、新建封装版本管理工具electron/version.ts

import { autoUpdater } from 'electron-updater';
import { dialog, BrowserWindow } from 'electron';const updateUrl = 'http://www.niech.cn/everyDayNote';/**检测更新 */
export const checkUpdate = (win: BrowserWindow) => {console.log('开始检测');// 设置更新检测的资源路径,会检测对应路径下的 last.yaml文件中的版本信息 上线后确保该文件能正常访问if (process.platform == 'darwin') {autoUpdater.setFeedURL(`${updateUrl}/mac`);return;} else {autoUpdater.setFeedURL(`${updateUrl}/win`);}//检测更新autoUpdater.checkForUpdates();//监听'error'事件autoUpdater.on('error', err => {console.log('出错拉' + err);dialog.showErrorBox('更新出错拉!', err.message);});//监听'update-available'事件,发现有新版本时触发autoUpdater.on('update-available', () => {console.log('found new version');dialog.showMessageBox({message: '发现新版本,正在下载安装包'});});// 更新包下载百分比回调autoUpdater.on('download-progress', function (progressObj) {if (win) {win.webContents.send('download-progress', progressObj);}});//默认会自动下载新版本,如果不想自动下载,设置autoUpdater.autoDownload = false// autoUpdater.autoDownload = false;//监听'update-downloaded'事件,新版本下载完成时触发autoUpdater.on('update-downloaded', () => {dialog.showMessageBox({type: 'info',title: '应用更新',message: '需要退出程序才能安装新版本,是否安装?',buttons: ['是', '否']}).then(buttonIndex => {if (buttonIndex.response == 0) {//选择是,则退出程序,安装新版本autoUpdater.quitAndInstall();}});});
};

四、主进程main.ts调用更新校检

import { checkUpdate } from './version'
/**
* 版本更新检测
*/
ipcMain.handle("check-update",(e:any)=>{// 获取发送通知的渲染进程窗口const currentWin = getWindowByEvent(e);// 升级校验checkUpdate(currentWin);
});/*** 通过窗口事件获取发送者的窗口* @param event ipc发送窗口事件*/
function getWindowByEvent(event: IpcMainEvent): BrowserWindow {const webContentsId = event.sender.id;for (const currentWin of BrowserWindow.getAllWindows()) {if (currentWin.webContents.id === webContentsId) {return currentWin;}}return null;
}

utils/electron.ts添加工具方法定义

/*** 新建窗口* @param path 路由地址*/
export function openWindow(path: string) {window.ipcRenderer.invoke("open-win", path);
}
/*** 检查版本更新*/
export function checkUpdate(){window.ipcRenderer.invoke("check-update");
}
export default {openWindow,checkUpdate
};

五、测试检查更新

<script setup lang="ts">
const router = useRouter()
import { onMounted, onUnmounted } from "vue";
import electronUtils from "@/utils/electron";
const toUser = () => {router.push('/userManage')
}
const toNote = () => {router.push('/func/noteManage')
}
const toLogin = () => {router.push('/login')
}
const checkUpdate = () => {electronUtils.checkUpdate()
}
onMounted(() => {// 版本更新,下载进度回调window.ipcRenderer.on("download-progress",downloadProgressHandle);});// 版本更新,处理下载进度回调
function downloadProgressHandle(e:any,data:any){console.log('下载',data);
}onUnmounted(() => {window.ipcRenderer.removeListener("download-progress",downloadProgressHandle);
});
</script><template><div class="container"><a @click="toUser()">用户管理</a><a @click="toNote()">语录管理</a><a @click="toLogin()">去登录</a><a @click="checkUpdate()">测试版本更新</a></div>
</template><style scoped>
.container{background: #F2F6FB;width: 100%;height: 100%;
}
</style>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 软件测试学习笔记丨Docker 安装、管理、搭建服务
  • ASP.net core 8.0网站发布
  • Linux软件包循环依赖解决 彻底删除i386架构 更新软件源
  • uniapp uni-table合并单元格
  • unity3d入门教程四
  • Nginx怎么重新编译添加模块
  • 深入理解 Milvus:新一代向量数据库的基础技术与实战指南
  • 北斗卫星系统信号介绍
  • NVM (Node Version Manager) 使用教程
  • AB 1756-L62 与 AB 5069 通过串口通信
  • 从C语言过渡到C++
  • Kubernetes精讲之网络通信与调度
  • jmeter元件+取样器(十)
  • 心觉:收钱就像喝水一样简单,是如何做到的?
  • 【MySQL】Ubuntu22.04中MySQL-V8安装和修改root密码
  • 「面试题」如何实现一个圣杯布局?
  • 0基础学习移动端适配
  • Android 架构优化~MVP 架构改造
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • canvas 绘制双线技巧
  • leetcode讲解--894. All Possible Full Binary Trees
  • Python进阶细节
  • scala基础语法(二)
  • TypeScript实现数据结构(一)栈,队列,链表
  • vue的全局变量和全局拦截请求器
  • 动态魔术使用DBMS_SQL
  • 用 Swift 编写面向协议的视图
  • 再谈express与koa的对比
  • Semaphore
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​马来语翻译中文去哪比较好?
  • ​数据结构之初始二叉树(3)
  • ###项目技术发展史
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $.each()与$(selector).each()
  • (1)(1.13) SiK无线电高级配置(六)
  • (7)svelte 教程: Props(属性)
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (十三)Flink SQL
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • **PHP二维数组遍历时同时赋值
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .gitignore文件---让git自动忽略指定文件
  • .htaccess配置重写url引擎
  • .NET MVC 验证码
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件