electron自动更新

2023-11-02

1.主进程background.js引入autoUpdater

let {autoUpdater} = require('electron-updater')

2.主进程写入更新代码

if (!process.env.WEBPACK_DEV_SERVER_URL) {
  autoUpdater.autoDownload = false

  autoUpdater.signals.updateDownloaded(() => {})
  autoUpdater.on('error', (error) => {
    log.warn('检查更新失败: ' + error == null ? 'unknown' : (error.stack || error).toString())
    // dialog.showErrorBox('Error: ', error == null ? 'unknown' : (error.stack || error).toString())
  })

  autoUpdater.on('update-available', (info) => {
    // var appInfo = {
    //   info: info.version,
    //   files: info.files,
    //   path: info.path,
    //   sha512: info.sha512,
    //   releaseDate: info.releaseDate
    // }
    dialog.showMessageBox({
      type: 'info',
      title: '更新提示',
      message: '软件需要更新,您是否立即更新?',
      buttons: ['推迟', '立即更新']
    }).then((res) => {
      log.warn('index:' + res.response)
      if (res.response === 1) {
        log.warn('选择升级')
        autoUpdater.downloadUpdate()
      } else {
        log.warn('选择不升级:')
      }
    })
  })

  // 检查更新时触发
  autoUpdater.on('update-available', (res) => {
    log.warn('检查更新时触发')
    // log.warn(res)
    // dialog.showMessageBox({
    //   title: '检查更新',
    //   message: '正在检查更新'
    // })
  })

  // 没有可用更新
  autoUpdater.on('update-not-available', () => {
    log.warn('没有可用更新')
    // dialog.showMessageBox({
    //   title: '已是最新版',
    //   message: '当前版本是最新版本。'
    // })
  })

  // 安装更新
  autoUpdater.on('update-downloaded', (res) => {
    // log.warn(res)
    log.warn('下载完毕!提示安装更新')
    dialog.showMessageBox({
      title: '升级提示!',
      message: '已自动升级为最新版,请等待程序安装完成并重启应用!'
    }, () => {
      log.warn('确认安装')
      setImmediate(() => autoUpdater.quitAndInstall(true, true))
    })
  })

3.启动应用调用检测更新函数

 if (process.env.WEBPACK_DEV_SERVER_URL) {
    // Load the url of the dev server if in development mode
    win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
    if (!process.env.IS_TEST) win.webContents.openDevTools()
  } else {
    createProtocol('app')
    // Load the index.html when not in development
    win.loadURL('app://./index.html')
    autoUpdater.checkForUpdates() //检测有无新版本
  }

4.在vue.config中配置更新地址

module.exports = {

  pluginOptions: {
    electronBuilder: {
    
      builderOptions: {
        productName: "打包后的exe名称",
        appId: "xxx",
        //注意, 只有在配置了publish路径时, build之后才会生成latest.yml文件
        publish: [
          {
            "provider": "generic",
            "url": "你的文件服务器地址"
          }
        ]
      }
    }
.......
  },

5.在package.json中配置第一个版本号

"version": "0.0.1"  //package.json  这是你的版本号

6.打包你的项目生成dist_electron文件

7.安装exe到你的电脑,这是初始版本。

8.重新写了业务代码后,更改package.json中的版本号为高版本,例如0.1.2,并重新打包生成dist_electron文件,将文件中的新版本exe和lates.yml放入你的文件服务器中。

9.启动你刚开始安装的exe,此时应用会自动检测有无新版本,没有无提示,有则提示是否更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

electron自动更新 的相关文章

  • Vue 3 Composition API 提供/注入在单文件组件中不起作用

    我正在使用 Composition API 在 VueJS 3 中创建一个库 我实现了提供 注入 如中所述docs https v3 vuejs org guide composition api provide inject html i
  • 不知道如何预览我生成的 Nuxt3 应用程序

    我刚刚在静态模式下创建了一个 Nuxt3 但我不想每次都将其推送到 Netlify 进行预览 这是我的nuxt config js 没有改变 import defineNuxtConfig from nuxt export default
  • Vue js动态导入组件

    我有以下父组件 它必须呈现动态子组件列表
  • 如何在 Vue 2 中使用 Vue 路由器

    我正在学习 Vue 并开始于网页包模板 https github com vuejs templates webpack tree master template src 我想做的第一件事是添加对 Vue Router 的支持 但我现在已经
  • Javascript:更改输入值时设置光标位置

    当您输入公式时 我试图在我的应用程序中重现类似于 Microsoft Excel Google Sheets 的用户体验 并且您可以使用不同的公式和变量来自动完成下拉菜单 为此 在验证自动完成功能后 我希望能够控制光标的位置 例如 如果我输
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • 如何将vue组件插入到contenteditable div中

    我想用 vue 创建简单的所见即所得编辑器 我发现只有一个在 vue js 上创建的真正的所见即所得编辑器 这里是 https quasar dev vue components editor 但我没有发现有插入图像的能力 其他 vue w
  • Electron:如何调整BrowserWindow的大小?

    如何在启动时而不是在工作时更改 BrowserWindow 的大小 我找到的所有解决方案都是这样的 var win new BrowserWindow width 800 height 600 show false 您的意思是在创建 Bro
  • 如何从 Vuex 状态使用 Vue Router?

    在我的组件中我一直在使用 this router push name home params id this searchText 要改变路线 我现在已经将一个方法移入我的 Vuex 操作中 当然this router不再有效 也没有Vue
  • Vue.js 拦截器

    我怎样才能使用interceptor in vue js 因此 在每个请求 响应之前 它应该首先进入拦截器 我已经搜索了很多 但找不到关于此的好的文档 我想像这样使用 JWTAuth function define use strict d
  • d3-sankey 链接在拖动事件时未更新

    问题一 我无法更新拖动事件上的 d3 sankey 链接 我正在尝试复制与此类似的 d3 垂直和水平拖动事件 https bl ocks org d3noob 5028304 https bl ocks org d3noob 5028304
  • 使用 bootstrap-vue 组件和 bootstrap 3 动态显示/隐藏列

    我目前正在尝试使用 bootstrap vue 表动态显示 隐藏 https bootstrap vue js org docs components table https bootstrap vue js org docs compon
  • 使用 vue-router 保留组件状态?

    我有一个列表 详细信息用例 用户可以双击产品列表中的项目 转到详细信息屏幕进行编辑 然后在完成后返回列表屏幕 我已经使用此处描述的动态组件技术完成了此操作 https v2 vuejs org v2 guide components htm
  • (Vue) Ant Design 使用 v-decorator 以 ant 形式显示客户端和服务器端验证

    我用过蚂蚁设计的表单组件v decorators用于验证表单 我想显示客户端 我当前已完成的 v decorator 规则验证 以及服务器端表单数据验证 将此视为示例登录表单
  • Vue.js:折叠/展开父级中的所有元素

    我需要为我的 Vue 组件 一些可折叠面板 添加 展开 折叠全部 功能 如果用户单击折叠按钮 然后单击某个面板并将其展开 然后单击折叠按钮不会做任何事因为观看的参数不会改变 那么如何正确实现此功能 按钮必须始终折叠和展开组件 我准备了简单的
  • 从 Axios 响应中解析 XML,推送到 Vue 数据数组

    在我的 Vue 应用程序中 我使用 Axios 获取 XML 文件并使用parseString将 XML 解析为 JSON 然后我需要通过result到 Vue 数据 this events My console log将解析后的 XML
  • 类型错误:app.makeSingleInstance 不是函数

    从 Electron v2 0 3 升级到最新版本 v5 0 1 当我尝试运行电子时 出现以下错误 TypeError app makeSingleInstance is not a function 我相信这是因为 api 已经改变了 我
  • 使用 axios get 请求发送对象[重复]

    这个问题在这里已经有答案了 我想发送一个带有对象的获取请求 对象数据将在服务器上用于更新会话数据 但该对象似乎没有正确发送 因为如果我尝试将其发送回去打印出来 我只会得到 N 我可以像这样使用 jQuery 来完成它 它可以工作 get m
  • vuejs 2.0.0 中选择的占位符

    我正在使用创建一个网络应用程序vuejs 2 0 https vuejs org guide forms html 我使用以下代码创建了简单的选择输入
  • Vue 多个组件位于一个包/文件中

    假设我想创建一个 UI 包 如何将多个组件放入一个 JS 文件中 通常我会将不同的组件放在不同的文件中 import ButtonText from ButtonText vue import ButtonIcon from ButtonI

随机推荐

  • Kafka偏移量(Offset)管理

    1 定义 Kafka中的每个partition都由一系列有序的 不可变的消息组成 这些消息被连续的追加到partition中 partition中的每个消息都有一个连续的序号 用于partition唯一标识一条消息 Offset记录着下一条
  • 【微信小程序】-- 配置uni-app的开发环境(四十八)

    所属专栏 微信小程序开发教程 作 者 我是夜阑的狗 个人简介 一个正在努力学技术的CV工程师 专注基础和实战分享 欢迎咨询 欢迎大家 这里是CSDN 我总结知识的地方 喜欢的话请三连 有问题请私信 文章目录 前言 一 配置uni app的开
  • Android 开发中让BUTTON变漂亮的小技巧

    最近在做android前端的时候 发现系统提供的button实在太过不忍直视 于是搜索了很多其他button的做法 自己也尝试了很多 但是一个一个去查有些麻烦 索性全部记下来 下面介绍几个好用的button设定 android layout
  • 【Yapi】Window10 超详细安装 Yapi 教程

    目录 问题一 Error getaddrinfo ENOTFOUND yapi demo qunar com yapi demo qunar com 80 错误处理 问题二 Npm 安装 Yapi 的时候 想指定安装目录 结果一直提示 EP
  • warning: ISO C++ forbids converting a string constant to 'char*'

    warning ISO C forbids converting a string constant to char Wwrite strings 解决办法 int main int argc char argv char str 先把C
  • sql 时间计算

    兩個時間之差的合計 DECLARE I INT SET I DATEDIFF ms GETDATE RAND 24 GETDATE SELECT convert varchar 10 I 86400000 Days convert varc
  • QT on Android的rtsp播放器demo

    手机 平板
  • 文件导入之Validation校验List对象数组

    背景 我们的接口是一个List对象 对象里面的数据基本都有一些基础数据校验的注解 我们怎么样才能校验这些基础规则呢 我们在导入excel文件进行数据录入的时候 数据录入也有基础的校验规则 这个时候我们又该如何少写代码让Validation框
  • rtthread空闲线程与定时器

    rtthread为什么要用到空闲线程 RT Thread是一个实时操作系统 它的内核采用了基于线程的设计思路 在RT Thread中 空闲线程是一种特殊的线程 它在系统没有其他任务需要执行时会被调度执行 因此 空闲线程的存在可以利用CPU的
  • 动态规划总结

    感谢赵剑波大牛的原稿 转载于http blog sina com cn zhaojianbo0124 第一节 动态规划基本概念一 动态规划三要素 阶段 状态 决策 他们的概念到处都是 我就不多说了 我只说说我对他们的理解 如果把动态规划的求
  • open3d显示RGBD点云(rope3d数据集)

    rope3d中同时有深度图 因此 可以创建rgbd图像点云 借助open3d库 需要确定相机内参和外参 注意统一坐标系 例如都显示在world坐标系 usr bin env python3 coding utf 8 for reading
  • 【六】Python全栈之路--for循环

    文章目录 1 双向循环的练习 2 break pass continue的使用 3 for循环 4 小练习 1 双向循环的练习 1 用两个循环完成十行十列的小星星 j 0 while j lt 10 打印星星 i 0 while i lt
  • [MAE]Masked Autoencoders掩膜自编码器

    目录 非对称的编码 解码架构 方法 流程 编码器 解码器 Partial Fine tuning 图像MAE MixMIM Uniform Masking HiViT 视频MAE VideoMAE 多模态MAE M3AE https git
  • v-model支input父子组件传值

    v model用于表单数据的双向绑定 其实它就是一个语法糖 这个背后就做了两个操作 v bind绑定一个value属性 v on指令给当前元素绑定input事件 自定义组件使用v model 应该有以下操作 接收一个value prop 触
  • 线程获取锁的顺序java_多线程(五) java的线程锁

    在多线程中 每个线程的执行顺序 是无法预测不可控制的 那么在对数据进行读写的时候便存在由于读写顺序多乱而造成数据混乱错误的可能性 那么如何控制 每个线程对于数据的读写顺序呢 这里就涉及到线程锁 什么是线程锁 使用锁的目的是什么 先看一个例子
  • Linux进程替换

    目录 进程替换 1 定义 2 为什么要进行进程替换 3 怎样进行进程程序替换 4 进程替换的原理 原理总结 5 Linux进程替换的函数 5 1参数 5 2函数返回值问题 5 3 execl函数用例 5 3 2升级案例 编辑 5 3 3调用
  • MySQL的DQL查询语句

    DQL 查询语句 1 排序查询 语法 order by 子句 order by 排序字段1 排序字段2 排序方式 ASC 升序 磨人的 DESC 降序 注意 如果有多个排序条件 则当前面的条件一致时 才会判断第二条件 2 聚合函数 将一列数
  • INS/GNSS组合导航(二)-INS常用的坐标系统及转换

    一 常用坐标系 由于INS是一种完全自主的导航系统 不与外界发生联系 但是我们又想知道物体的的位置 尤其是其与GNSS组合时需要知道其与GNSS在同一坐标系下的位置信息 这就牵扯到了INS的几个导航系统之间的转换 笼统的讲 INS输出的是载
  • springcloud整合consul

    搭建consul环境 linux安装consul 搭建生产者 1 建module provider payment8006 2 写pom
  • electron自动更新

    1 主进程background js引入autoUpdater let autoUpdater require electron updater 2 主进程写入更新代码 if process env WEBPACK DEV SERVER U