Skip to content

Electron 自动升级

官网

官网地址: https://www.electronjs.org/

脚手架

包含自动升级 https://gitee.com/fly2world_admin/electron-quick-start

自动升级

1.Webview页面升级

采用内嵌的http的方式,http也main模块进行通信即可

2.Main模块升级

  1. 修改版本号[1.2.3]打包
    1代表大版本;2.3代表小版本
    大版本目前采用手动校验,如果有,打开浏览器,重新下载

  2. 将 app.asar 上传到服务器,并填写版本号(略)

  3. 比对远程版本和本地版本:确认是否更新

js
// 判断有无版本更新
async function justUpdate() {
    loadLocalVersion();
    console.log("localVersion-->", localVersion);

    await loadRemoteVersion();
    console.log("remoteVersion-->", remoteVersion);

    if (localVersion.major != remoteVersion.major) {
        // 大版本目前采用手动校验,如果有,打开浏览器,重新下载;更新极少,先不做
        return;
    }

    if (localVersion.minor == remoteVersion.minor) {
        return;
    }

    // 需要更新:下载远程版本
    download(updatePackageUrl);
}
  1. 不一样,下载远程版本 app.asar
js
// 下载
function download(fileUrl) {
    const destination = "./resources/app.bak";//下载后重命名为 app.bak(无法下载asar后缀)

    const file = fs.createWriteStream(destination);

    https.get(fileUrl, (response) => {
        response.pipe(file);
        file.on("finish", () => {
            file.close(() => {
                console.log("文件下载完成");
                // 重命名app.bak为app.asar
                renameAsar();
            });
        });
    }).on("error", (err) => {
        fs.unlink(destination, () => {
            console.error(`文件下载失败:${err.message}`);
        });
    });
}
  1. 替换本地app.asar
  2. 重启客户端
js
// 重命名app.bak为app.asar ,并重启
function renameAsar() {
    exec("xcopy /y .\\resources\\app.bak .\\resources\\app.asar");

    setTimeout(() => {
        // fs.unlink("./resources/app.bak"); //直接删除报错,不删除了
        app.quit();
        app.relaunch();
    }, 5000);// 直接重启也报错,延迟5秒
}