electron自动更新

发布时间 2023-08-28 11:56:07作者: 七星飘虫

electron可通过electron-updater实现客户端自动更新

mian.js

// 检测更新,在你想要检查更新的时候执行,renderer事件触发后的操作自行编写
function updateHandle() {
    // let message = {
    //     error: '检查更新出错',
    //     checking: '正在检查更新……',
    //     updateAva: '检测到新版本,正在下载……',
    //     updateNotAva: '现在使用的就是最新版本,不用更新',
    // };
    const os = require('os');

    autoUpdater.setFeedURL(updateUrl);
    autoUpdater.on('error', function (error) {
        //sendUpdateMessage(message.error)
        console.log(error);
        sendUpdateMessage("error", error)
    });
    autoUpdater.on('checking-for-update', function () {
        //sendUpdateMessage(message.checking)
        sendUpdateMessage("checking")
    });
    autoUpdater.on('update-available', function (info) {
        //sendUpdateMessage(message.updateAva)
        sendUpdateMessage("updateAva")
    });
    autoUpdater.on('update-not-available', function (info) {
        sendUpdateMessage("updateNotAva")
        //sendUpdateMessage(message.updateNotAva)
    });

    // 更新下载进度事件
    autoUpdater.on('download-progress', function (progressObj) {
        lodingWindow.webContents.send('downloadProgress', progressObj)
    })
    autoUpdater.on('update-downloaded', function (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) {
        // ipcMain.on('isUpdateNow', (e, arg)=> {
        //     console.log(arg);
        //     console.log("开始更新");
        //     sendUpdateMessage("开始更新")
        //     //some code here to handle event
        //     autoUpdater.quitAndInstall();
        // });
        sendUpdateMessage("downloaded");
        autoUpdater.quitAndInstall();

        //lodingWindow.webContents.send('isUpdateNow')
    });

    ipcMain.on("checkForUpdate", () => {
        //执行自动更新检查
        if (NODE_ENV !== "development") { //开发环境不检查更新
            autoUpdater.checkForUpdates();
        }
    })
}

// 通过main进程发送事件给renderer进程,提示更新信息
function sendUpdateMessage(type, e) {
    if (!lodingWindow.isDestroyed()) {
        lodingWindow.webContents.send('updateMessage', type, e)
    }
}

  

preload.js

window.addEventListener('DOMContentLoaded', () => {
  //加载完成检查更新
  ipcRenderer.send("checkForUpdate");
})
//桥接网页内容
contextBridge.exposeInMainWorld('winApi', {
  //程序更新信息
  updateMessage: (callback) => ipcRenderer.on("updateMessage", callback),
  //下载进度
  downloadProgress: (callback) => ipcRenderer.on("downloadProgress", callback),
  //立即更新
  isUpdateNow: () => ipcRenderer.on("isUpdateNow", () => {
    ipcRenderer.send("isUpdateNow");
  })
});

  

 

参考链接

https://www.electronjs.org/zh/docs/latest/tutorial/tutorial-publishing-updating

https://blog.csdn.net/AK852369/article/details/122123433