electron-updater实现electron应用程序更新

使用electron开发桌面应用对于前端来说是比较新的领域。通常web端实现应用的更新比较简单,因为用户访问web端的网页都是通过浏览器访问,输入网址后,找到对应服务器的资源然后返回给用户,所以我们更新应用只需要替换服务器端的代码就可以。但是对于客户端,大多数资源都是在本地的,没有网络也是可以打开,只是和网络交互的接口没有数据而已。

所以桌面应用程序更新需要用户在应用开始时检测更新,用户决定是否更新替换当前应用。

electron-updater实现应用更新的步骤:

1、npm install electron-updater --save

这里不能使--save-dev因为该插件在程序运行时需要。

2、在electron程序入口文件main.js中加入如下配置

ipcMain.on(‘update‘, (e, arg)=>{
    updateHandle();
})

// 检测更新,在你想要检查更新的时候执行,renderer事件触发后的操作自行编写
function updateHandle(){
    let message={
      error:‘检查更新出错‘,
      checking:‘检查更新中……‘,
      updateAva:‘正在下载新版本……‘,
      updateNotAva:‘现在已是最新版本‘,
    };
    //如下应用程序的路径请自行替换成自己应用程序的路径
    let updateFeedUrl=‘http://<ip>:<port>/download/win/‘;
    if (process.platform == ‘darwin‘) {
        updateFeedUrl=‘http://<ip>:<port>/download/mac/‘;
    }

    autoUpdater.setFeedURL(updateFeedUrl);
    autoUpdater.on(‘error‘, function(error){
        sendUpdateMessage(message.error)
    });
    autoUpdater.on(‘checking-for-update‘, function() {
        sendUpdateMessage(message.checking)
    });
    autoUpdater.on(‘update-available‘, function(info) {
        sendUpdateMessage(message.updateAva)
    });
    autoUpdater.on(‘update-not-available‘, function(info) {
        sendUpdateMessage(message.updateNotAva)
    });

    // 更新下载进度事件
    autoUpdater.on(‘download-progress‘, function(progressObj) {
        win.webContents.send(‘downloadProgress‘, progressObj)
    })
    autoUpdater.on(‘update-downloaded‘,  function (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) {
        sendUpdateMessage(‘isUpdataNow‘);
        ipcMain.on(‘updateNow‘, (e, arg) => {
            autoUpdater.quitAndInstall();
        })
    });

    //some code here to handle event
    autoUpdater.checkForUpdates();
}

// 通过main进程发送事件给renderer进程,提示更新信息
function sendUpdateMessage(text){
    win.webContents.send(‘message‘, text)
}

  以上的流程是,渲染进程通知主进程进行更新检测 -> 主进程发起应用程序检测 -> 检测中 -> 下载应用 -> 替换应用  如果出问题都会走到error监听事件中

在渲染进程的需要检查更新的页面中,通知主进程进行更细的代码:

ipcRenderer.on("message", (event, text) => {
      if(text == ‘isUpdateNow‘){
             if(confirm(‘确认下载?‘)){
                  ipcRenderer.send(‘updateNow‘)
             }
      }
});

ipcRenderer.on("downloadProgress", (event, progressObj)=> {
       console.log(progressObj);
});
 ipcRenderer.send(‘update‘);

  最后在打包时通过设置version参数自增,新版本号大于老版本号,如老版本号1.0.0,新版本2.0.0。这样就可以实现程序的自动更新

原文地址:https://www.cnblogs.com/leejay6567/p/10128200.html

时间: 2024-11-09 17:37:35

electron-updater实现electron应用程序更新的相关文章

Electron与WEB桌面应用程序开发及其它

这几天在构思项目,研究了一下Electron,记录下来. 说起WEB桌面程序,当前最火的就是Electron了. Electron的架构用一句话总结,就是一个main.js进程加上一个或数个chrome窗口,每个窗口都包含一个独立的Node.js. 这样的架构,使得这种桌面应用必须是一个(或数个)单页面应用(SPA),而这个SPA还拥有访问本地API的能力(Node.js). 一方面,程序对前端框架的依赖必然加强,想再JQuery打天下就不那么容易了:另一方面也大大加强了前端框架的能力与版图.

你第一个Electron应用 | Electron in Action(中译)

效果演示: 本章主要内容 构造并设置Electron应用 生成package.json,通过开发用Electron配置其工作 在你的项目中预先构建Electron版本 配置你的package.json去启动主进程 从主进程生成渲染进程 利用Electron沙盒,限制宽松的优点构建通常在浏览器无法构建的功能 使用Electron的内置模块来回避一些常见的问题 在第一章中,我们从高的层次上,讨论了什么是Electron.说到底这本书叫做<Electron实战>,对吧?在本章中,我们通过从头开始设置

[渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序更新相关数据

这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第六篇:为ASP.NET MVC应用程序更新相关数据 原文: Updating Related Data with the Entity Framework in an ASP.NET MVC Application 译文版权所有,谢绝全文转载--但您可以在您的网站上添加到该教程的链接. 在之前的教程中您已经成功显示了相关数据.在本教程中

Android开发之应用程序更新实现

最近给项目app做升级,对Android应用程序更新稍有研究,分享一下我的心得. 既然是更新,那么一定是要联网和下载的,所以联网和存储访问权限时一定要有的: <!-- 权限申请 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 联网权限 --> <uses-permission android:name="android.permission

关于微信小程序更新机制

1)小程序的启动方式: 冷启动----小程序首次打开或销毁后再次被打开 热启动----小程序打开后,在一段时间内(目前:5分钟)再次被打开,此时会将后台的小程序切换到前台. 2)根据以上两种启动方式,相应的更新机制为: 小程序冷启动时,会检查小程序是否有最新版本.如果有则将异步下载最新版本,但是仍将运行当前版本等到下一次冷启动时再运行最新版本. 如果你想现在就使用最新版本则需要调用wx.getUpdateManager API进行处理: 3)关于wx.getUpdateManager实战使用 3

使用uni-app开发小程序,关于小程序更新后与用户本地不会及时更新解决办法

1.原因分析 在小程序更新开发版本之后,用户本地并没有对之前版本的小程序进行删除,那么再进入小程序的时候的版本是不会发生变化的,这是由于发版是异步执行,因此新版本将会覆盖的比较慢,本质是小程序的启动方式分为两种,冷启动与热启动. 冷启动:指的是用户首次打开或小程序被微信主动销毁后再次打开的情况,此时小程序需要重新加载启动.热启动:指用户已经打开过某小程序,然后在一定时间内再次打开该小程序,此时无需重新启动,只需将后台态的小程序切换到前台,这个过程并不会重新加载启动. 2.解决方案 为了在小程序每

将现有vue项目基于electron打包成桌面应用程序

一.前言 项目本来打算采用B/S架构去做的,只是在"人群中多看了你一眼",便直接撸了. 二.使用electron集成桌面应用 本身项目是使用vue-cli开发的,在使用electron之前,需要将本身的项目打包好后打开index.html能显示网页.因为刚接触便直接拿官方demo进行打包了. 1.克隆官方demo:git clone https://github.com/electron/electron-quick-start 2.cd electron-quick-start-&g

[android] 手机卫士应用程序更新和签名

弹出升级对话框 获取AlertDialog.Builder对象,通过new出来 调用Builder对象的setTitle()方法,参数:文本 调用Builder对象的setMessage()方法,参数:文本,json传回来的信息 调用Builder对象的setPositiveButton()方法,设置确定按钮 参数:文本,OnClickListener对象,匿名内部类实现,重写onClick()方法, 方法里面下载APK,替换安装 调用Builder对象的setNegativeButton()方

基于C/S模式的程序更新-下载

思路: ①检查是否需要更新(通过数据库获取最新版本号和本地版本号进行比对(本地版本号可存在txt文件中,需要进行一定程度上的加密和解密操作)) ②从指定目录下载最新版本的程序覆盖本地文件(下载的文件时压缩文件) ③将压缩文件进行程序内解压缩(有可能客户电脑未安装压缩软件,所以只能通过程序本身来进行解压) ④解压完成后调用主程序 实现: 下载:WebClient 1 if (webClient.IsBusy)//是否存在正在进行中的Web请求 2 { 3 webClient.CancelAsync