electron 自动更新 热跟新
electron 自动更新 热跟新 自动跟新之后不用重新安装
- 使用electron-upadta 自动跟新之后需要用户在重新安装一遍程序,用户体验不好,开发electron-hot-updata 插件,直接热更新,更新之后不需要用户重新安装程序
- 先看实际效果
- Installing
- 1. 因为electron 默认是安装在C:\Program Files\ 目录下 操作文件需要管理员权限;
- 2. 配置项目服务器地址
- 3. 版本号 如果你有更好的修改项目版本号办法 直接无视这一块
- 根目录新建 hot-updata.js
- 在background.js 调用 hot-updata.js
- 在app.vue 里面调用electron 获取最新版本
- preload.js
使用electron-upadta 自动跟新之后需要用户在重新安装一遍程序,用户体验不好,开发electron-hot-updata 插件,直接热更新,更新之后不需要用户重新安装程序
先看实际效果
electrin-hot-updata
引用文本 阿松大
electron的项目用 electron 自动更新,更新之后需要手动安装程序,有需求就有产出;
electron-hot-updata插件,使用本插件热更新,动态替换electron 执行文件达到热更新;
github 代码地址
使用方法
安装插件
npm i electron-hot-updata
Installing
A step by step series of examples that tell you how to get a development env running.
1. 因为electron 默认是安装在C:\Program Files\ 目录下 操作文件需要管理员权限;
// 在electron-build 的package.json 里面配置权限;
// 我的项目是基于vue 我就直接在vue.config.js 里面配置
//因为electron 默认是安装在C:\Program Files\ 目录下 操作文件需要管理员权限;module.exports = {...,"win": { "requestedExecutionLevel": "highestAvailable" // highestAvailable 最高权限},}
2. 配置项目服务器地址
// vue.config.js1.配置项目服务器地址 module.exports = {...,publish: [{"provider": "generic",url: "http://192.168.0.191/electron/" // 更新文件服务器地址 放你后台的地址}],}配置之后执行electron-build 打包之后会自动生成 latest.yml 文件2.sasr 配置 //看你自己需求 可有可无module.exports = {...,sasr: false // 执行文件是否打包成sasr文件}sasr:false // 打包出来的就是 html + css + js sasr:true // 打包之后就是sasr 文件##http://192.168.0.191/electron/ 下面存放两个文件latest.yml 系统打包之后自动生成app.zip //app.zip 分两种情况1.sasr:false 项目/dist_electron/win-unpacked/resources/ 下找到app文件夹 打包成 app.zip 文件2.sasr:true 项目/dist_electron/win-unpacked/resources/ 下找到 app.sasr文件 打包成app.zip 文件
3. 版本号 如果你有更好的修改项目版本号办法 直接无视这一块
electron 版本区分默认依靠 项目>package.json>version;所有每次打包之后 都要修改版本号 ;靠版本号来区分是否需要更新在vue.cinfog.js 里面添加以下代码 <!-- 一下代码每次运行项目都会修改版本号 -->const path = require('path')const fs = require('fs');const resolve=(dir)=> {return path.join(__dirname, dir)}const AddZero = (time)=> {if (time < 10) {return "0" + time} else {return time}}let packageTxt = fs.readFileSync('./package.json', 'utf8');let versionData = packageTxt.split('\n');let packageJson = JSON.parse(packageTxt);let VersionArr = packageJson.version.split('.');let date = new Date();let today = date.getFullYear() + "" + AddZero((date.getMonth() + 1)) + "" + AddZero(date.getDate())if (today == VersionArr[1]) {VersionArr[2] = parseInt(VersionArr[2]) + 1} else {VersionArr[1] = date.getFullYear() + "" + AddZero((date.getMonth() + 1)) + "" + AddZero(date.getDate())VersionArr[2] = 1;}let versionLine = VersionArr.join('.');for (let i = 0; i < versionData.length; i++) {if (versionData[i].indexOf('"version":') != -1) {versionData.splice(i, 1, ' "version": "' + versionLine + '",');break;}}fs.writeFileSync('./package.json', versionData.join('\n'), 'utf8');
根目录新建 hot-updata.js
// hot-updata.js 里面代码
import {electronHotupdata} from "electron-hot-updata"
const electronHotupdatas= new electronHotupdata(this)
const path = require('path');
import {ipcMain,app
} from 'electron'
let mainWindow=null
export function updateAva(windows,provider,Version){mainWindow=windows// 设置地址electronHotupdatas.setProvider(provider)// 设置版本号electronHotupdatas.setNewVersion(Version)// *** 一般情况下不介意修改地址// electron 默认安装在 C:\Program Files\ 目录下 如果热更新地址不对 electronHotupdatas.setBaseUrl 动态修改地址 // electronHotupdatas.setBaseUrl(baseUrl)// 监听获取版本失败electronHotupdatas.on("get-version-failed",(message)=>{sendHotUpdateMessage({cmd: 'get-version-failed',message: message})})// 监听没有新版本electronHotupdatas.on("no-new-version",(message)=>{sendHotUpdateMessage({cmd: 'no-new-version',message: message})})// 监听有新版本 可更新electronHotupdatas.on("new-version-available",(message)=>{sendHotUpdateMessage({cmd: 'new-version-available',message: message})})// 监听获取版本失败 更新失败electronHotupdatas.on("downloaded-failed",(message)=>{sendHotUpdateMessage({cmd: 'downloaded-failed',message: message})})// 监听更新完成electronHotupdatas.on("complete-downloaded",(message)=>{sendHotUpdateMessage({cmd: 'complete-downloaded',message: message})})// 跟新完成立即重启程序ipcMain.on("relaunch",()=>{app.relaunch()app.exit()})// 触发更新事件ipcMain.on("start-updata",(message)=>{electronHotupdatas.startUpdata()})// 获取跟新进度electronHotupdatas.on("downloaded-progressNumber",(message)=>{sendHotUpdateMessage({cmd: 'downloaded-progressNumber',message: message})})// 触发获取新版本事件ipcMain.on("startLoop",(message)=>{electronHotupdatas.startLoop()})}//给渲染进程发送消息
function sendHotUpdateMessage(text) {mainWindow.webContents.send('hotMessage', text)
}
在background.js 调用 hot-updata.js
import { app, protocol, BrowserWindow,Menu } from 'electron'
import { createProtocol } from 'vue-cli-plugin-electron-builder/lib'
import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer'// 自动更新
import {updateAva} from './hot-updata.js' ;const isDevelopment = process.env.NODE_ENV !== 'production'// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([{ scheme: 'app', privileges: { secure: true, standard: true } }
])async function createWindow() {// Create the browser window.const win = new BrowserWindow({width: 900,height: 800,frame:true,webPreferences: {// Use pluginOptions.nodeIntegration, leave this alone// See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info// nodeIntegration: (process.env// .ELECTRON_NODE_INTEGRATION as unknown) as boolean,// contextIsolation: !(process.env// .ELECTRON_NODE_INTEGRATION as unknown) as boolean,nodeIntegration:true,contextIsolation:false,webSecurity: false,// preload:'./src/preload.js' ,preload:__dirname+'\\preload.js' , // 必须要引入 preload.js 不然获取不到electron }})Menu.setApplicationMenu(null)if (process.env.WEBPACK_DEV_SERVER_URL) {// Load the url of the dev server if in development modeawait win.loadURL(process.env.WEBPACK_DEV_SERVER_URL as string)if (!process.env.IS_TEST) win.webContents.openDevTools()} else {createProtocol('app')// Load the index.html when not in developmentwin.loadURL('app://./index.html')win.webContents.openDevTools()// win.loadURL(process.env.WEBPACK_DEV_SERVER_URL as string)}// http://192.168.0.191/electron/ 是我本地的测试地址 换成你服务器的地址updateAva(win, 'http://192.168.0.191/electron/',app.getVersion());
}// Quit when all windows are closed.
app.on('window-all-closed', () => {// On macOS it is common for applications and their menu bar// to stay active until the user quits explicitly with Cmd + Qif (process.platform !== 'darwin') {app.quit()}
})app.on('activate', () => {// On macOS it's common to re-create a window in the app when the// dock icon is clicked and there are no other windows open.if (BrowserWindow.getAllWindows().length === 0) createWindow()
})// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', async () => {// if (isDevelopment && !process.env.IS_TEST) {// // Install Vue Devtools// try {// await installExtension(VUEJS_DEVTOOLS)// } catch (e:any) {// console.error('Vue Devtools failed to install:', e.toString())// }// }createWindow()
})// Exit cleanly on request from parent process in development mode.
if (isDevelopment) {if (process.platform === 'win32') {process.on('message', (data) => {if (data === 'graceful-exit') {app.quit()}})} else {process.on('SIGTERM', () => {app.quit()})}
}
在app.vue 里面调用electron 获取最新版本
// ts
const ipcRenderer = (window as any).ipcRenderer
// jsconst ipcRenderer =window.ipcRenderer// window.ipcRenderer === undefined 说明没有引入 preload.js
created() { let _this = this;if (ipcRenderer) {window.setInterval(() => {console.log("循环开始检查更新....")ipcRenderer.send("startLoop");}, 10000);ipcRenderer.on("hotMessage", (event: any, arg: any) => {console.log(arg);if (arg.cmd == 'new-version-available') {_this.modalVisible = true} else if (arg.cmd == 'downloaded-failed') {console.log('更新失败')} else if (arg.cmd == 'downloaded-progressNumber') {console.log('获取跟新进度' + arg.message)_this.progress = arg.message} else if (arg.cmd == 'complete-downloaded') {console.log('更新完成')// 更新完成 立即 重启程序ipcRenderer.send("relaunch");}});}}
preload.js
const electron = require('electron');
window.ipcRenderer = require('electron').ipcRenderer;
window.remote = require('electron').remote;
electron 自动更新 热跟新相关推荐
- 如何彻底禁止win10家庭版系统自动更新-2021跟新
如何彻底禁止win10家庭版系统自动更新-2021跟新 文章主要参考:http://www.xitongcheng.com/jiaocheng/win10_article_61393.html --- ...
- electron自动更新版本electron-updater
首先来看效果图: 打包electron生成新的exe安装包:npm run dist 使用simplehttpserver开启存放打包好的exe安装包与yml文件的本地服务(打包目录里有这两个文件) ...
- vue 实现app项目版本迭代自动更新 热更新
需求: app打开时自动检测是否是最新版本,如果不是出现弹框,点击升级 效果图: 实现步骤: 一,准备工作 声明一个bol值VersionFlag控制版本升级弹窗的开关,默认关闭 Website: 更 ...
- 联想怎么关闭更新并关闭计算机能取消吗,联想win10取消自动更新,联想小新怎么关掉自动更新...
首先,在桌面打开此电脑(我们平时的"我的电脑") 这时我们会发复现C盘50GB的内存只剩下20多G了,这是因为更新WIN10的原因 确定上述情况后,右键单击C盘--属性 在常规中这 ...
- 【原创】自动更新程序2--更新程序的主窗体(技术:spring.net+三层架构+webservice+IrisSkin2换肤)...
上篇文章主要介绍了webservice的部署以及主要的代码,下面给大家贴上主程序的代码,并简单的讲解.主程序判断是否有更新时通过主程序目录下有一个update.ini文件内的version是否有变化, ...
- electron自动更新
1.主进程background.js引入autoUpdater let {autoUpdater} = require('electron-updater') 2.主进程写入更新代码 if (!pro ...
- 电脑设置代理IP工具 可自动更新
简介: 这是一款用易语言写的简约的代码IP工具,不是调用的外部IP,IP都是内置的,并且可以10分钟自动更新一次新的IP,具体有需要的朋友可以拿去试试,没有测试过,不保证百分百可以用. 网盘下载地址: ...
- electron打包可选择安装位置,可自动更新
Electron打包调参软件(windows版) ----------------------------------可选安装位置,可自动更新,手动更新 一:引包:electron,electron- ...
- 【Electron】酷家乐客户端开发实践分享 — 软件自动更新
作者:钟离,酷家乐PC客户端负责人 原文地址:webfe.kujiale.com/electron-au- 酷家乐客户端:下载地址 www.kujiale.com/activity/13- 文章背景: ...
最新文章
- 【前沿技术】严重事故!实习生删除字节跳动所有轻量级机器学习模型
- 技术剖析 | Axonius为什么能获得 2019 RSAC创新大奖
- 【Leetcode】大神总结的所有TopK问题模板(基于快速排序)
- python的进程模块
- 如何查看某个js 变量 runtime 类型
- Vue UI 框架对比 element VS iview
- Redis 通过 RDB 方式进行数据备份与还原
- 使用Guava对并发应用程序进行基于对象的微锁定
- html网页和cgi程序编程,CGI 编程方式学习
- java你可能不知道的事(2)--堆和栈
- 零基础搭建Hadoop大数据处理环境
- unity3d点击屏幕判断是否击中场景中物体
- Servlet+MyBatis项目转Spring Cloud微服务,多数据源配置修改建议
- 阿里云服务器ftp连接后21端口无法使用的问题
- linux下载finger程序,Linux的finger命令
- The producer group has been created before
- 共享红色理念创业计划书PPT模板
- 边缘设备、系统及计算杂谈(14)——API Gateway(Traefik)学习
- 勃仔诞生记:Hubbleverse哈勃元宇宙的起源故事
- 【Jetpack】学穿:LiveData →
热门文章
- 产品生命周期管理——高效的全生命周期的产品管理方法
- 怎样把几个PDF文档合并一个文件?
- C#中改变工具条ToolStrip的位置/宽度/高度?
- “应用程序配置不正确,程序无法启动”的解决方法资料收集
- Rosalind Java| Finding a Shared Motif
- 关于DMA,TCM和Cache
- 碰到spoolsv.exe-应用程序错误怎么办?
- 解决webview 刷新问题,返回刷新webview,webview 刷新不好使
- 维度探索:三维空间、四维空间和更高维度
- ES插件在谷歌浏览器的安装