electron autoUpdater自动更新使用示例 客户端+服务端

封装好的 update.js 模块 

'use strict';
const { autoUpdater } = require('electron')
// 更新检测
// https://www.electronjs.org/zh/docs/latest/api/auto-updaterconst checkUpdate = (serverUrl) =>{const updateUrl = `${serverUrl}/update?platform=${process.platform}&version=${app.getVersion()}`// 注意这里必须使用trycatch包裹 否则代码无法运行try {autoUpdater.setFeedURL({ updateUrl })// 每隔 5 分钟检查一次更新setInterval(() => {autoUpdater.checkForUpdates()}, 60000 * 5)/*** 更新下载完成的时候触发。* API文档中的返回,即下面的参数,根据返回的参数顺序接收** 返回:event EventreleaseNotes stringreleaseName stringreleaseDate DateupdateURL string*/autoUpdater.on('update-downloaded', (event, releaseNotes, releaseName,releaseDate, updateURL) => {const dialogOpts = {type: 'info',buttons: ['Restart', 'Later'],title: 'Application Update',message: process.platform === 'win32' ? releaseNotes : releaseName,detail:'A new version has been downloaded. Starta om applikationen för att verkställa uppdateringarna.'}dialog.showMessageBox(dialogOpts).then((returnValue) => {if (returnValue.response === 0) autoUpdater.quitAndInstall()})})autoUpdater.on('checking-for-update',(evt)=>{console.log(evt);})autoUpdater.on('update-available',(evt)=>{console.log(evt);})autoUpdater.on('update-not-available',(evt)=>{console.log(evt);})// 错误处理autoUpdater.on('error', (err) => {console.error('There was a problem updating the application')console.error(err)})} catch (error) {console.log(error);}
}module.exports = checkUpdate

main.js中调用

const { app, BrowserWindow, autoUpdater } = require('electron')
const path = require('node:path')const checkUpdate = require('./update')// API服务BASE_URL
const SERVER_URL = 'https://api.tekin.cn/electronAppDemo'const createWindow = () =>{const win = new BrowserWindow({width:800, height: 600,// 预加载webPreferences:{// nodeIntegration: true,sandbox: false,// __dirname 字符串指向当前正在执行的脚本的路径(在本例中,它指向你的项目的根文件夹)。// path.join API 将多个路径联结在一起,创建一个跨平台的路径字符串。preload: path.join(__dirname, 'preload.js')}})// 加载URLwin.loadURL('https://dev.tekin.cn')}// 使用whenReady函数监听
app.whenReady().then(()=>{createWindow()app.on('activate',()=>{//如果没有窗口打开则打开一个窗口 (macOS)if (BrowserWindow.getAllWindows().length===0) {createWindow()}})// 执行更新检测checkUpdate(SERVER_URL)
})// 关闭所有窗口时退出应用 (Windows & Linux)
app.on('window-all-closed',()=>{if (process.platform != 'darwin' ) {app.quit();}
})

服务端API

服务端更新API JSON格式  Update Server JSON Format

仅 url 是必须提供的参数,其他可选

{"url": "https://mycompany.example.com/myapp/releases/myrelease","name": "My Release Name","notes": "Theses are some release notes innit","pub_date": "2013-09-18T12:29:53+01:00"
}

## Update File JSON Format

The alternate update technique uses a plain JSON file meaning you can store your update metadata on S3 or another static file store. The format of this file is detailed below:

```json
{
    "currentRelease": "1.2.3",
    "releases": [
        {
            "version": "1.2.1",
            "updateTo": {
                "version": "1.2.1",
                "pub_date": "2013-09-18T12:29:53+01:00",
                "notes": "Theses are some release notes innit",
                "name": "1.2.1",
                "url": "https://mycompany.example.com/myapp/releases/myrelease"
            }
        },
        {
            "version": "1.2.3",
            "updateTo": {
                "version": "1.2.3",
                "pub_date": "2014-09-18T12:29:53+01:00",
                "notes": "Theses are some more release notes innit",
                "name": "1.2.3",
                "url": "https://mycompany.example.com/myapp/releases/myrelease3"
            }
        }
    ]
}
```

PHP代码示例

     public function update() {// electron autoUpdater  Tekin$data = ["url" => "https://dev.tekin.cn/download/myapp.zip", 'name' => "MyApp 1.0.0", "notes" => "Theses are some release notes innit", "pub_date" => "2013-09-18T12:29:53+01:00"];exit(json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/579614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读——TÜLU

How Far Can Camels Go? Exploring the State of Instruction Tuning on Open Resources 统一输入格式:将所有数据集格式化为遵循聊天机器人风格的模式,以统一指令数据集的各种风格和格式。用户输入和目标话语之前特殊token:,助手…

Xcode 编译速度慢是什么原因?如何提高编译速度?

作为一个开发者,我们都希望能够高效地开发应用程序,而编译速度是影响开发效率的重要因素之一。然而,有时候我们会发现在使用 Xcode 进行开发时,译速度非常慢,这给我们带来了不少困扰。那么,为什么 Xcode 的…

Android apk安装包反编译——apktool工具

apk 文件结构 首先是 apk,即安卓程序的安装包。Apk 是一种类似于 Symbian Sis 或 Sisx 的文件格式。通过将 APK 文件直接传到 Android 模拟器或 Android 手机中执行即可安装。 而 apk 文件实际上就是一个 MIME 为 ZIP 的压缩包,只不过后缀名进行了更改。…

线上3DVR展厅拉近客户距离,提升谈单转化效率

随着互联网的普及和数字化技术的发展,越来越多的企业开始利用3D虚拟展厅来展示自己的产品和服务。虚拟展厅作为一种新型的展示方式,能够迅速拉近客户与企业的距离,提高客户的信任感,从而促进订单的达成。 720云3D空间漫游 在传统…

【HBase】——简介

1 HBase 定义 Apache HBase™ 是以 hdfs 为数据存储的,一种分布式、可扩展的 NoSQL 数据库。 2 HBase 数据模型 • HBase 的设计理念依据 Google 的 BigTable 论文,论文中对于数据模型的首句介绍。 Bigtable 是一个稀疏的、分布式的、持久的多维排序 m…

分布式下如何实现统一日志系统?

在业务系统开发中,日志的收集和分析很重要,特别是在进行故障分析时,日志记录得好,可以帮我们快速定位问题原因。在互联网分布式系统下,日志变得越来越分散,数据规模也越来越大,如何更好地收集和…

初见 Amazon Q

前言 如果今年要写一篇年终总结的话,生成式 Ai 一定是绕不过的一个话题,自从去年的 chatGPT 火爆全球后,今年各种生成式 Ai 的产品络绎不绝地出现大众视线,版本迭代的速度也是非常快,大家甚至开始在自己的生活和工作中…

亿赛通电子文档安全管理系统 dump任意文件读取漏洞(CNVD-2023-09184)

产品简介 亿赛通电子文档安全管理系统,(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资…

开集目标检测-标签提示目标检测大模型(吊打YOLO系列-自动化检测标注)

背景 大多数现有的对象检测模型都经过训练来识别一组有限的预先确定的类别。将新类添加到可识别对象列表中需要收集和标记新数据,并从头开始重新训练模型,这是一个耗时且昂贵的过程。该大模型的目标是开发一个强大的系统来检测由人类语言输入指定的任意…

十一.MyBatis的缓存

11.1缓存介绍 为什么使用缓存? 使用缓存的主要原因是为了提高应用程序的性能和响应速度。缓存可以存储经常访问的数据或计算结果,从而避免重复进行相同的计算或查询数据库等耗时的操作。通过使用缓存,你可以减少对原始数据源的访问次数&…

2022年山东省职业院校技能大赛高职组云计算赛项试卷第二场-容器云

2022年山东省职业院校技能大赛高职组云计算赛项试卷 目录 【赛程名称】云计算赛项第二场-容器云 需要竞赛软件包以及资料可以私信博主! 【赛程名称】云计算赛项第二场-容器云 【赛程时间】2022-11-27 09:00:00至2022-11-27 16:00:00 说明:完成本任务…

【流复制环境PostgreSQL-14.1到PostgreSQL-16.1大版本升级】

PostgreSQL大版本会定期添加新特性,这些新特性通常会改变系统表的布局,但内部数据存储格式很少改变。pg_upgrade通过创建新的系统表和重用旧的用户数据文件来执行快速升级。 pg_upgrade升级主要有三种用法: 1、使用pg_upgrade拷贝升级。 2、…

【工具】windeployqt 在windows + vscode环境下打包

目录 0.背景简介 1.windeployqt简介 2.打包具体过程 1)用vscode编译,生成Release文件夹(也有Debug文件夹,但是发布版本一般都是用Release) 2)此时可以看下Release文件夹内,一般是.exe可执行…

【学习笔记】Java函数式编程03 Stream流-终结操作

书接上回 3.3.3 终结操作 3.3.3.1 forEach 对集合的每一个元素进行处理 接触很多了不赘述 3.3.3.2 count 用来获取当前流中的元素的个数 比如,打印出所有作家的作品的总数 System.out.println(authors.stream().flatMap(author -> author.getBooks().stre…

文献研读|Prompt窃取与保护综述

本文介绍与「Prompt窃取与保护」相关的几篇工作。 目录 1. Prompt Stealing Attacks Against Text-to-Image Generation Models(PromptStealer)2. Hard Prompts Made Easy: Gradient-Based Discrete Optimization for Prompt Tuning and Discovery&#…

汽车零配件装配产线中使用RFID技术和不使用RFID技术的优缺点

汽车零配件装配产线中使用RFID技术和不使用RFID技术的优缺点 RFID(射频识别技术)是非接触式自动识别技术,经常被使用于工业制造、物流管理、仓储物品盘点等领域。我们聊一聊在汽车零配件装配产线中使用和不使用RFID技术的优缺点 在汽车零配件装配线使用RFID技术可以…

.NetCore NPOI 读取excel内容及单元格内图片

由于数据方提供的数据在excel文件中不止有文字内容还包含图片信息,于是编写相关测试代码,读取excel文件内容及图片信息. 本文使用的是 NPOI-2.6.2 版本,此版本持.Net4.7.2;.NetStandard2.0;.NetStandard2.1;.Net6.0。 测试文档内容&#xf…

[足式机器人]Part4 南科大高等机器人控制课 CH11 Bascis of Optimization

本文仅供学习使用 本文参考: B站:CLEAR_LAB 笔者带更新-运动学 课程主讲教师: Prof. Wei Zhang 课程链接 : https://www.wzhanglab.site/teaching/mee-5114-advanced-control-for-robotics/ 南科大高等机器人控制课 Ch11 Bascis o…

linux 中 ext2文件系统实现

ext2文件系统结构 图片的svg下载链接(图中关于buffer的部分,上下两部分是重复的,是从不同维度下看的buffer结构) linux内核本身不提供ext2文件系统的格式化功能,可以参考busybox中对mkfs.ext2的实现(mkfs.…

sheng的学习笔记-【中】【吴恩达课后测验】Course 4 -卷积神经网络 - 第二周测验

课程4_第2周_测验题 目录 第一题 1.在典型的卷积神经网络中,随着网络的深度增加,你能看到的现象是? A. 【  】 n H n_H nH​和 n W n_W nW​增加,同时 n C n_C nC​减少 B. 【  】 n H n_H nH​和 n W n_W nW​减少&#x…