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

electron-updater实现electron全量版本更新

在 Electron 应用中使用 electron-updater 来实现自动更新功能时,通常你会在一个专门的模块或文件中管理更新逻辑。如果你想要使用 ES6 的 import 语法来引入 electron-updater,你需要确保你的项目已经配置好了支持 ES6 模块的构建工具(如 Webpack)或者使用 Babel 这样的转译器。

以下是一个基本的示例,展示了如何使用 import 语句来引入 electron-updater 并实现基本的更新逻辑。


安装 electron-updater:


bash
npm install electron-updater --save-dev

bash
yarn add electron-updater --dev

核心代码实现

/** 升级版本* @Author: diygw*/
import { ipcMain } from 'electron'
import { autoUpdater } from 'electron-updater'
let mainWindow: any = null
export function upgradeHandle(window: any, feedUrl: any) {const msg = {error: '检查更新出错 ...',checking: '正在检查更 ...',updateAva: '检测到新版本 ...',updateNotAva: '已经是最新版本 ...',downloadProgress: '正在下载新版本 ...',downloaded: '下载完成,开始更新 ...'}mainWindow = windowautoUpdater.autoDownload = false //true 自动升级 false 手动升级//设置更新包的地址autoUpdater.setFeedURL(feedUrl)//监听升级失败事件autoUpdater.on('error', function (message: any) {sendUpdateMessage({cmd: 'error',title: msg.error,message: message})})//监听开始检测更新事件autoUpdater.on('checking-for-update', function () {sendUpdateMessage({cmd: 'checking-for-update',title: msg.checking,message: ''})})//监听发现可用更新事件autoUpdater.on('update-available', function (message: any) {sendUpdateMessage({cmd: 'update-available',title: msg.updateAva,message: message})})//监听没有可用更新事件autoUpdater.on('update-not-available', function (message: any) {sendUpdateMessage({cmd: 'update-not-available',title: msg.updateNotAva,message: message})})// 更新下载进度事件autoUpdater.on('download-progress', function (message: any) {sendUpdateMessage({cmd: 'download-progress',title: msg.downloadProgress,message: message})})//监听下载完成事件autoUpdater.on('update-downloaded',function (event: any) {sendUpdateMessage({cmd: 'update-downloaded',title: msg.downloaded,message: '最新版本已下载完成, 退出程序进行安装'})//退出并安装更新包autoUpdater.quitAndInstall()})//接收渲染进程消息,开始检查更新ipcMain.on('checkForUpdate', () => {//执行自动更新检查autoUpdater.checkForUpdatesAndNotify()})ipcMain.on('downloadUpdate', () => {// 下载autoUpdater.downloadUpdate()})
}
//给渲染进程发送消息
function sendUpdateMessage(text: any) {mainWindow.webContents.send('update-message', text) 
}

  主进程引用 


// 在你的主进程文件(如 main.js)中引入并使用  

import { upgradeHandle } from './upgrade'
upgradeHandle(mainWindow, "https://****")

结合页面调用

<script setup lang="ts">import { ElMessage } from 'element-plus';import { reactive, ref } from 'vue';const dialogVisible = ref(false);const percentage = ref(0);let ipcRenderer = window.electron?.ipcRenderer;let state = reactive({oldversion: undefined,version: undefined,isnew: false});function compareVersion(version1, version2) {const newVersion1 =`${version1}`.split('.').length < 3 ? `${version1}`.concat('.0') : `${version1}`;const newVersion2 =`${version2}`.split('.').length < 3 ? `${version2}`.concat('.0') : `${version2}`;//计算版本号大小,转化大小function toNum(a) {const c = a.toString().split('.');const num_place = ['', '0', '00', '000', '0000'],r = num_place.reverse();for (let i = 0; i < c.length; i++) {const len = c[i].length;c[i] = r[len] + c[i];}return c.join('');}//检测版本号是否需要更新function checkPlugin(a, b) {const numA = toNum(a);const numB = toNum(b);return numA > numB ? 1 : numA < numB ? -1 : 0;}return checkPlugin(newVersion1, newVersion2);}if (ipcRenderer) {window.electron.ipcRenderer.invoke('diygw-get-version').then(res => {let version = res.data || res;state.oldversion = version;});//接收主进程版本更新消息window.electron.ipcRenderer.on('update-message', (event, arg) => {console.log(arg);if ('update-available' == arg.cmd) {state.version = arg.message.version;if (compareVersion(state.version, state.oldversion) > 0) {state.isnew = true;}// 假设我们有一个名为 'userProfile' 的路由//显示升级对话框} else if ('download-progress' == arg.cmd) {//更新升级进度console.log(arg.message.percent);dialogVisible.value = true;let percent = Math.round(parseFloat(arg.message.percent));percentage.value = percent;} else if ('error' == arg.cmd) {dialogVisible.value = false;ElMessage.error('更新失败');}});window.electron.ipcRenderer.send('checkForUpdate');} else {//用来测试显示// state.oldversion = 1;// state.version = 1;// state.isnew = true;}const download = () => {window.electron.ipcRenderer.send('downloadUpdate');};const openLink = url => {window.electron.ipcRenderer.invoke('diygw-down', {text: url});};
</script><template><div class="flex container flex-direction-column"><div class="text-lg text-bold">关于</div><div class="flex flex1"><div class="flex-direction-column align-center flex" style="padding: 10px 40px"><img src="../assets/logo.png" style="width: 100px" /><div class="text-bold">DIYGW可视化</div></div><div class="flex1 flex-direction-column flex" style="font-size: 14px"><div class="flex"><div><el-text class="padding-right" v-if="state.oldversion">当前版本:{{ state.oldversion }}</el-text><el-text v-if="state.version && state.isnew">最新版本:{{ state.version }}</el-text><el-textclass="padding-right"type="danger"@click="download()"v-if="state.version && state.isnew">点击更新</el-text></div></div><div class="margin-top" v-if="dialogVisible"><el-progressstatus="success":text-inside="true":stroke-width="20":percentage="percentage":show-text="true"></el-progress></div><div class="flex text-center margin-top"><div@click="openLink('https://www.diygw.com')"class="text-bg-tip link margin-right flex-sub">访问网站</div><div@click="openLink('https://www.diygw.com/69')"class="text-bg-tip link flex-sub">帮助文档</div></div><div class="margin-top text-bg-tip"><p>DIY官网可视化工具</p><p>可视化拖拽开发神器</p><p>无须编程 零代码基础 所见即所得设计工具</p><p>轻松制作UniApp、微信小程序、支付宝小程序、Vue3、H5、WebApp、单页动画</p><p>UniApp框架量身设计</p><p>涵盖uniapp各个方面,助力900万Uniapp+开发者。</p><p>一套代码编到十几个平台,这不是梦想。</p><p>高效可视化开发工具快速与HBuilder X开发联调。</p><p>强大的代码生成器,让您感受先进的生产力,让您的想法快速上线。</p></div></div></div></div>
</template>

请注意,electron-updater 的配置可能会根据你的 Electron 打包工具(如 electron-packager, electron-builder 等)和项目设置有所不同。例如,如果你使用的是 electron-builder,你需要在 package.json 中添加一些配置来确保 electron-updater 能正常工作。

此外,上述代码中的 autoUpdater.quitAndInstall(); 调用在 macOS 上可能不是必需的,因为 macOS 上的更新通常会自动处理。在 Windows 上,你可能需要显式调用此方法来重启应用并安装更新。

最后,请确保在 Electron 的主进程中调用更新逻辑,因为 electron-updater 需要访问文件系统和其他敏感资源。

相关文章:

electron-updater实现electron全量版本更新

在 Electron 应用中使用 electron-updater 来实现自动更新功能时&#xff0c;通常你会在一个专门的模块或文件中管理更新逻辑。如果你想要使用 ES6 的 import 语法来引入 electron-updater&#xff0c;你需要确保你的项目已经配置好了支持 ES6 模块的构建工具&#xff08;如 We…...

Mysql梳理6——order by排序

目录 6 order by排序 6.1 排序数据 6.2 单列排序 6.3 多行排列 6 order by排序 6.1 排序数据 使用ORDER BY字句排序 ASC&#xff08;ascend&#xff09;:升序DESC(descend):降序 ORDER BY子句在SELECT语句的结尾 6.2 单列排序 如果没有使用排序操作&#xff0c;默认…...

Java设计模式—面向对象设计原则(三) -----> 依赖倒转原则DIP(完整详解,附有代码+案例)

文章目录 3.3 依赖倒转原则(DIP)3.3.1概述3.3.2 案例 3.3 依赖倒转原则(DIP) 依赖倒转原则&#xff1a;Dependency Inversion Principle&#xff0c;DIP 3.3.1概述 高层模块不应该依赖低层模块&#xff0c;两者都应该依赖其抽象&#xff1b;抽象不应该依赖细节&#xff0c;细…...

Linux操作系统 进程(3)

接上文 Linux进程优先级之后&#xff0c;我们了解到僵尸进程与孤儿进程的形成原因&#xff0c;既然是因为父进程没有接收子进程的退出状态导致的&#xff0c;那么我们该如何去获取子进程的退出状态呢&#xff1f;那本篇文章将围绕这个问题来解释进程。 环境 &#xff1a; vsco…...

QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第五期]

QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第五期] 第五期介绍&#xff1a;频道模块之接口授权管理和发言管理 目录 QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第五期]第五期介绍&#xff1a;频道模块之接口授权管理和发言管理获取机器人在频道可用权限列表…...

代码签名证书快速申请指南

申请代码签名证书是确保软件或应用程序在分发和安装过程中不被篡改的重要步骤。以下是详细的快速申请指南&#xff1a; 一、选择证书品牌和服务商 选择知名证书品牌&#xff1a;首先&#xff0c;选择一个国际知名的代码签名证书品牌&#xff0c;如GlobalSign、Digicert、Comod…...

安卓 uniapp跨端开发

HBuilder X 4.24 本地插件方式使用原生插件 例如 MT-TTS 地址PS: 播放 speek({text: ‘test’}) 应为 播放 speak({text: ‘test’})MT-TTS下载下来之后,将 nativeplugins 文件夹拷贝到 uniapp 项目根目录中manifest.json ---- App原生插件配置 运行 语音引擎测试文字转语音播…...

【高阶用法】uniapp的i18n多语言模块修复与增强(Typescript)

痛点 在i18n多语言模块使用过程中&#xff0c;发现下面几个问题&#xff0c;需要解决 1&#xff09;uni-best框架下&#xff0c;$t功能函数无法实时的切换语言&#xff0c;可能跟使用有关 2&#xff09;uni-best建议的translate方式在vue块外使用太繁琐&#xff0c;希望不用…...

SQL Server Data Tools (SSDT)入门教程

SSDT (SQL Server Data Tools) 是微软提供的一款用于开发、设计和管理SQL Server数据库的工具。它集成在Visual Studio中&#xff0c;允许开发人员和数据库管理员在统一的环境中进行数据库开发与管理。以下是关于SSDT的详细介绍&#xff1a; 1. 什么是SSDT&#xff1f; SQL S…...

窗户检测系统源码分享

窗户检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …...

2.计算机网络基础

2. 计算机网络基础 (1) 计算机网络的定义 计算机网络是指将地理位置不同、具有独立功能的多个计算机系统通过通信线路和设备连接起来,以功能完善的网络软件实现网络中资源共享的系统。最简单的定义是:计算机网络是一些互相连接的、自治的计算机系统的集合。最庞大的计算机网…...

硬中断,软中断恢复位置

汇编初始化栈指针&#xff0c;interrupt,svc preserve8 ;preserve8 和 restore8 通常用于保护寄存器的状态;以确保在函数调用前后某些寄存器的值保持不变area reset,code,readonlycode32entryb startldr pc,do_undefined;这些地址不能随便写&#xff0c;0x0,0x4,0x8....这些…...

MySQL基础(13)- MySQL数据类型

目录 一、数据类型概述 1.MySQL中的数据类型 二、整型 1.数据类型可选属性 2.使用建议 三、浮点数、定点数、位类型 1.类型介绍 2.浮点类型 3.定点数类型 4.位类型 四、日期时间类型 1.YEAR 2.DATE 3.TIME 4.DATETIME 5.TIMESTAMP 6.TIMESTAMP和DATETIME的区别…...

数据结构------二叉树简单介绍及实现

如果不是满二叉树或者完全二叉树&#xff0c;就要用链式存储 //搜索二叉树&#xff1a;左子树的所有值比根小&#xff0c;右子树的所有值比根大 // 实现查找&#xff0c;最多找高度次&#xff08;类似二分法&#xff09; //二分查找存在的问题&#xff1a…...

由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(六)

概述 在 WWDC 24 中,苹果推出了数据库框架 SwiftData 2.0 版本。听说里面新增了能让数据记录“借尸还魂”的绝妙法器,到底是真是假呢? 我们在上篇博文中介绍了 History Trace 是如何稳妥的处理数据删除操作的。而在这里,我们将继续介绍 SwiftData 2.0 中另一个新特性:“墓…...

尚品汇-秒杀下单实现-页面轮询查询订单状态(五十三)

目录&#xff1a; &#xff08;1&#xff09;整合秒杀业务 &#xff08;2&#xff09;秒杀下单 &#xff08;3&#xff09;秒杀下单监听 &#xff08;4&#xff09;页面轮询接口 &#xff08;1&#xff09;整合秒杀业务 秒杀的主要目的就是获取一个下单资格&#xff0c;拥…...

2024年微电子与纳米技术国际研讨会(ICMN 2024) Microelectronics and Nanotechnology

文章目录 一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询 一、会议详情 二、重要信息 大会官网&#xff1a;https://ais.cn/u/vEbMBz提交检索&#xff1a;EI Compendex、IEEE Xplore、Scopus大会时间&#xff1a;2024年9月20-22日地点&#xff1a;成都…...

2024最新版,人大赵鑫老师《大语言模型》新书pdf分享

本书主要面向希望系统学习大语言模型技术的读者&#xff0c;将重点突出核心概念与 算法&#xff0c;并且配以示例与代码&#xff08;伪代码&#xff09;帮助读者理解特定算法的实现逻辑。由于大语言模型技术的快速更迭&#xff0c;本书无法覆盖所有相关内容&#xff0c;旨在梳理…...

[Leetcode 543][Easy]-二叉树的直径-递归

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 取一个结点的最大直径就是取一个结点的左子树最大深度右子树最大深度之和&#xff0c;因此可以定义一个递归函数&#xff0c;作用是取一个结点的最大直径。这个函数中还实现了求左子树最大深度…...

高级大数据开发学习路线指南

掌握大数据技术是一项系统性工程&#xff0c;涉及到广泛的技能和专业知识。为了帮助初学者构建坚实的基础&#xff0c;并逐步成长为大数据领域的专家&#xff0c;下面详细阐述了一条全面而深入的学习路线&#xff1a; 1. Java 编程基础 - 打造坚实的底层技能 关键知识点&…...

Arduino PWM转4-20mA工业电流信号:二阶滤波与V/I转换电路设计

1. 项目概述&#xff1a;从PWM到工业标准电流信号在工业自动化、过程控制和传感器领域&#xff0c;4-20 mA电流环是一个几乎无处不在的标准。它用4 mA代表测量值的下限&#xff08;如0C&#xff09;&#xff0c;20 mA代表上限&#xff08;如100C&#xff09;&#xff0c;这种设…...

2026年,本地精准营销高性价比服务商来袭,你还不了解一下?

在本地商业竞争日益激烈的2026年&#xff0c;实体店面临着诸多挑战&#xff0c;引流难、成本高、复购率低等问题困扰着众多商家。而中粤&#xff08;广州&#xff09;信息科技有限公司作为本地精准营销的高性价比服务商&#xff0c;正以其独特的优势和卓越的服务&#xff0c;为…...

终极艾尔登法环帧率解锁指南:轻松突破60FPS限制

终极艾尔登法环帧率解锁指南&#xff1a;轻松突破60FPS限制 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/EldenRing…...

Transient、QuickEye、VerifyEye傻傻分不清?一文讲透Ansys里三种眼图仿真方法的适用场景与避坑指南

Transient、QuickEye、VerifyEye深度解析&#xff1a;Ansys眼图仿真技术选型实战指南 在高速数字系统设计中&#xff0c;眼图分析是评估信号完整性的黄金标准。面对Ansys工具链中三种截然不同的眼图生成方法&#xff0c;工程师常常陷入选择困境——是追求精确度的传统瞬态分析&…...

Allegro PCB设计小技巧:如何让Route Keepout区域既能走线又能打过孔(附详细步骤图)

Allegro PCB设计实战&#xff1a;Route Keepout区域的灵活控制技巧 在高速PCB设计中&#xff0c;Route Keepout区域的管理常常让工程师陷入两难境地——元件封装自带的限制区域与实际布线需求产生冲突。特别是处理PCIE等高速信号时&#xff0c;这种矛盾尤为突出。传统做法要么完…...

Claude SWOT分析(内部风控文档流出版):3类高危使用场景+2个监管红线预警

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Claude SWOT分析&#xff08;内部风控文档流出版&#xff09;&#xff1a;3类高危使用场景2个监管红线预警 高危使用场景识别 在企业级AI应用中&#xff0c;Claude模型若未经严格风控适配&#xff0c;…...

特定任务需求场景下的过约束并联机构构型设计与控制方法【附代码】

✨ 长期致力于曲面加工、构型综合、运动学和动力学建模、性能评价、多目标优化、滑模控制、鲁棒控制、视觉传感技术研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;…...

因果推断与机器学习融合:量化分析社会运动中镇压与抗议的动态关系

1. 项目概述&#xff1a;当数据科学遇见社会运动如果你研究过社会运动&#xff0c;尤其是那些看似突然爆发、席卷全国的抗议浪潮&#xff0c;你可能会被一个核心问题困扰&#xff1a;国家机器的镇压&#xff0c;究竟是浇灭火焰的冷水&#xff0c;还是火上浇油的催化剂&#xff…...

2026这6款神级降AIGC平台大公开,一键让AIGC率直逼绝对安全线!

步入 2026 年&#xff0c;学术圈的风向早已不是从前的模样。曾经大家还在为查重率发愁&#xff0c;如今却陷入了更棘手的困境——如何在不破坏论文专业性的前提下&#xff0c;彻底消除 AI 痕迹&#xff1f;随着 AIGC 检测技术不断进化&#xff0c;高校对论文的审核标准也愈发严…...

DIY智能USB充电器:基于电流检测与双稳态继电器的零功耗节能方案

1. 项目概述&#xff1a;打造一款智能、节能的USB手机充电器作为一名电子爱好者&#xff0c;我经常折腾各种电源项目。市面上很多手机充电器&#xff0c;包括一些原装货&#xff0c;都存在一个通病&#xff1a;手机充满电后&#xff0c;充电器依然插在插座上&#xff0c;内部电…...