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

news2024/11/20 11:32:45

封装好的 update.js 模块 

'use strict';
const { autoUpdater } = require('electron')
// 更新检测
// https://www.electronjs.org/zh/docs/latest/api/auto-updater

const 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 Event
        releaseNotes string
        releaseName string
        releaseDate Date
        updateURL 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')
        }
     })
    // 加载URL
    win.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.coloradmin.cn/o/1337771.html

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

相关文章

【vue】avue-crud表单属性配置(表格以及列)

目录 前言1. 表格属性2. 列属性 前言 项目实战中需要调某个样式,但作为后端开发者也只能硬着头皮,此贴作为初学前端的第一帖,以下为学习笔记。 对应form属性文档可看这篇文章:form属性文档对应curd属性文档可看这篇文章&#xf…

tekton 发布 kubernetes 应用

tekton 发布 kubernetes 应用 基于Kubernetes 服务部署 Tekton Pipeline 实例,部署完成后使用tekton来完成源码拉取、应用打包、镜像推送和应用部署。 本文实现一个 golang-helloworld 项目 CI/CD 的完整流程,具体包括以下步骤: 从 gitee…

验证 Mixtral-8x7B-Instruct-v0.1 和 LangChain SQLDatabaseToolkit 的集成效果

验证 Mixtral-8x7B-Instruct-v0.1 和 LangChain SQLDatabaseToolkit 的集成效果 0. 背景1. 验证环境说明2. 验证开始2-1. 准备测试数据库2-2. 读取环境配置信息2-3. 导入依赖包2-3. 创建 SQLDatabaseToolkit 对象和 AgentExecutor 对象2-4. 第1个测试 - 描述一个表2-5. 第2个测…

关于Axios发送Get请求无法添加Content-Type

在拦截器中尝试给headers添加Content-Type: request.interceptors.request.use(config > {if (!config.headers[Content-Type]) {config.headers[Content-Type] application/json;}return config;},error > {return Promise.reject(error)} )如果是GET请求&…

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

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

Redis分布式缓存之主从哨兵分片集群

Redis主从 数据同步原理 Redis哨兵 Redis分片集群 集群伸缩:在集群中插入或删除某个节点 集群故障转移

使用ffmpeg实现视频旋转并保持清晰度不变

1 原始视频信息 通过ffmpeg -i命令查看视频基本信息 ffmpeg -i source.mp4 ffmpeg version 6.1-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 project)configuration: --enable-gpl --enable-…

Java 基础学习(十九)网络编程、反射

1 Socket编程 1.1 Socket编程概述 1.1.1 Socket简介 在网络编程中,Socket(套接字)是一种抽象概念,它用于在不同计算机之间进行通信。Socket可以看作是一种通信的端点,可以通过Socket与其他计算机上的程序进行数据传…

亚马逊云科技 re:Invent 2023 产品体验:亚马逊云科技产品应用实践 国赛选手带你看 Elasticache Serverless

抛砖引玉 讲一下作者背景,曾经参加过国内世界技能大赛云计算的选拔,那么在竞赛中包含两类,一类是架构类竞赛,另一类就是 TroubleShooting 竞赛,对应的分别为亚马逊云科技 GameDay 和亚马逊云科技 Jam,想必…

Pytest框架 —— 用例标记和测试执行篇!

pytest用例标记和测试执行篇 上一篇文章入门篇咱们介绍了pytest的前后置方法和fixture机制,这个章节主要给大家介绍pytest中的标记机制和用例执行的方法。pytest可以通过标记将数据传入于测试函数中,也可以通过标记中对执行的用例做筛选,接下…

WebGL开发安全培训应用

使用 WebGL 开发安全培训应用可以为员工提供在虚拟环境中体验危险情境、学习安全操作和应急处理技能的机会。以下是开发安全培训应用的一般步骤,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.明确…

Web(10)XSS漏洞

XSS跨站脚本攻击 XSS是什么 XSS(cross-site-scripting) 即是跨站脚本攻击,是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了 HTML 以及用户端…

实战10 角色管理

目录 1、角色后端接口 2、角色列表查询 2.1 效果图 2.2页面原型代码 2.3 角色api代码 role.js 2.4 查询角色列表代码 4、 新增和编辑角色 5、删除角色 6、分配权限 6.1 分配权限思路 6.2 分配权限回显接口 6.3 分配权限回显前端实现 6.4分配权限后端接口 6.4.1 R…

实验八 基于FPGA的分频器的设计

基本任务一:设计一个分频器,输入信号50MHZ,输出信号频率分别为1KHZ,500HZ,1HZ。 m100: 扩展任务二:控制蜂鸣器发出滴滴滴的声音

补题与总结:leetcode第 377 场周赛

文章目录 写在最前面的复盘2977. 转换字符串的最小成本 II(Flody 爆搜优化->dp) 写在最前面的复盘 感谢leetcode,丰富了我为数不多的卡常经验 2是简单思维题,但卡常 4是爆搜优化,也卡常,补题时给卡麻了…

【HBase】——简介

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

.Net7.0 或更高版本 System.Drawing.Common 上传图片跨平台方案

项目升级.Net7.0以后,System.Drawing.Common开关已经被删除,且System.Drawing.Common仅在 Windows 上支持 ,于是想办法将原来上传图片验证文件名和获取图片扩展名方法替换一下,便开始搜索相关解决方案。 .Net6.0文档:…

Python 高级(四):线程池 ThreadPoolExecutor

大家好,我是水滴~~ 当涉及到需要同时处理多个任务的情况时,使用线程池是一种高效的方法。Python提供了concurrent.futures模块,其中的ThreadPoolExecutor类使得使用线程池变得非常方便。本文将详细介绍Python线程池的概念、使用方法和示例代…

使用 AnyGo 修改 iPhone 手机定位

在当今数字化时代,我们的手机已经成为我们日常生活中不可或缺的一部分。然而,有时我们可能会遇到一些情况,需要修改手机的定位信息。这个需求可能来自于各种不同的原因,包括但不限于保护个人隐私、测试应用程序的地理位置相关功能…

数据仓库【5】:项目实战

数据仓库【5】:项目实战 1、项目概述1.1、项目背景1.2、复购率计算 2、数据描述3、架构设计3.1、数据仓库架构图 4、环境搭建4.1、环境说明4.2、集群规划4.3、搭建流程 5、项目开发5.1、业务数据生成5.2、ETL数据导入5.3、ODS层创建&数据接入5.4、DWD层创建&…