electron应用自动更新

一、配置主进程文件electron.js

该主进程文件(electron.js)在前端打好的dist包中创建

const {app, BrowserWindow,ipcMain,dialog} =require('electron');
const isDev = require('electron-is-dev');
const {autoUpdater} = require('electron-updater');
const path=require("path");
const electron = require('electron');
/*获取electron窗体的菜单栏*/
const Menu = electron.Menu;
/*隐藏electron创建的菜单栏*/
Menu.setApplicationMenu(null);
let mainWindow,webContents;
function createWindow () {  //创建一个新窗口
    mainWindow = new BrowserWindow({
        show: false,
        webPreferences: {
            nodeIntegration: true,
            //preload: __dirname + '/preload.js'
        },
        icon:"./123.ico"
    });
    webContents=mainWindow.webContents;
    mainWindow.maximize(); //窗口最大化
    mainWindow.on('closed', function () {  //窗口关闭方法
        mainWindow = null
    });
    //自动更新提示
    autoUpdater.setFeedURL("http://localhost:8888/update");
    setInterval(() => {
        autoUpdater.checkForUpdates()
    }, 6000);
    autoUpdater.on('update-downloaded', (event, releaseNotes, releaseName) => {
        const dialogOpts = {
            type: 'info',
            buttons: ['重新启动并更新', '稍后更新'],
            title: '系统更新',
            message: process.platform === 'win32' ? releaseNotes : releaseName,
            detail: '有一个新版本需要下载. 请重启软件进行更新.'
        };
        dialog.showMessageBox(dialogOpts).then((returnValue) => {
            if (returnValue.response === 0) autoUpdater.quitAndInstall()
        })
    });
    autoUpdater.on('error', message => {
        console.error('下载更新失败');
        console.error(message)
    });

    mainWindow.loadURL(`file://${__dirname}/index.html`);  //窗口主文件地址
}


//渲染进程通知关闭APP
ipcMain.on('closeApp', function (event, args) {
    app.quit();
});
//渲染进程通知最大化
ipcMain.on('maxApp', function (event, args) {
    mainWindow.maximize(); //窗口最大化
});
//渲染进程通知最小化
ipcMain.on('minApp', function (event, args) {
    mainWindow.minimize(); //窗口最小化
});

//以下就是类似于app的生命周期的方法
app.on('ready', () => {
    createWindow();
});

app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') {
        app.quit();
    }
});

app.on('activate', () => {
    if (mainWindow === null) {
        createWindow();
    }
});

二、配置package.json

该文件也是在dist包目录下,通过npm init创建

{
  "name": "electron_test",
  "version": "1.0.2",
  "description": "",
  "main": "electron.js",
  "homepage": ".",
  "scripts": {
    "electron-start": "electron .",
    "dist": "electron-builder"
  },
  "devDependencies": {
    "electron": "^8.2.0",
    "electron-builder": "^22.4.1"
  },
  "dependencies": {
    "electron-is-dev": "^1.1.0",
    "electron-updater": "^4.2.5"
  },
  "author": "liushxin",
  "license": "ISC",
  "build": {
    "win": {
      "icon": "./123.ico"
    },
    "nsis": {
      //是否一键安装,建议为 false,可以让用户点击下一步、下一步、下一步的形式安装程
      "oneClick": false,
      //允许修改安装目录,建议为 true,是否允许用户改变安装目录,默认是不允许
      "perMachine": true,
      "allowElevation": true,
      "allowToChangeInstallationDirectory": true,
      //创建桌面图标
      "createDesktopShortcut": true,
      //创建开始菜单图标
      "createStartMenuShortcut": true,
      //安装时头部图标
      "installerHeaderIcon": "./123.ico",
      "runAfterFinish": true,
      //安装图标
      "installerIcon": "./123.ico",
      //卸载图标
      "uninstallerIcon": "./123.ico"
    },
    "productName": "测试自动更新1.0.2",
    "appId": "lsx",
    "directories": {
      "output": "distBuild"
    },
    "publish": [
      {
        "provider": "generic",
        "url": "http://localhost:8888/update"
      }
    ],
    "asar": true
  }
}

运行npm run dist打包成功后会生成如下文件夹
在这里插入图片描述

三、利用Node+express搭建一个简易的本地更新服务

新建一个空的node项目

在这里插入图片描述
app.js

const express = require("express");
const app = express();

app.get("/", (req, res) => {
    res.send("Hello world");
});
app.all("*", function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By", " 3.2.1");
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});

app.use("/update", express.static("./update"));

app.listen(8888, (req, res) => {
    console.log(res);
    console.log("Server is running at http://localhost:8888");
});

进行新版本更替时需要修改package.json中的version
然后将打包好的如下几个文件扔到node服务的update文件夹下,就会检测到自动更新了。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值