# 自动更新/进程
服务器传过来的版本号大于致信版本号时,会弹出该窗口进行自动更新。
# 代码定位
TIP
代码定位于 src\modules\upgrade\upgrade.js
中 checkUpdate
函数
# 逻辑说明
为了优化性能,自动更新窗口并不是每次打开致信都需要去加载,所以只在做了版本对比判断后才会显示和加载自动更新窗口。
- 等待主窗口发出自动更新事件,主窗口还会传一个包含版本信息对象过来,具体格式请在 WEB 端查看。
- 如果需要更新则加载本地的自动更新页面
src\modules\page_update\download.html
。 - 开始执行下载,下载完成后执行安装包进行更新。
# 涉及到的相关函数,代码、代码文件
# 事件监听
// 监听自动更新事件
ipcMain.on("check-update", (event, data) => {
data && (updateData = data);
let upgrade = require("./modules/upgrade/upgrade.js");
upgrade.checkUpdate(false, updateData);
});
// 获取自动更新
ipcMain.on("set-check-update", (event, message) => {
let upgrade = require("./modules/upgrade/upgrade.js");
upgrade.checkUpdate(true, updateData);
});
// 下载自动更新文件。
ipcMain.on("update-getfile", (event, args) => {
const file = require("./modules/configuration/file");
file.file.getUpdateFile(updateData.url, (data) => {
event.sender.send("update-progress", data);
});
// event.sender.send('update-progress', 0.5);
});
# checkUpdate(isMenu, updateData)
执行更新,判断版本号和通过配置信息中获取是否强制更新。
isMenu
是否强制更新,也就是点击取消是跳过更新还是退出程序updateData
包含了版本信息,致信版本和服务器版本进行对比后判断是否显示自动更新
# createUpdateWindow()
创建更新窗口,执行自动更新。
自动更新窗口会发出 update-getfile
事件(见上方事件监听),执行下载更新,下载更新逻辑位于 src\modules\configuration\file.js
文件中,见 getUpdateFile(Url, callback)
# getUpdateFile(Url, callback)
下载更新文件并打开
Url
更新文件 Url 地址callback
下载进度回调
# WEB 端调出自动更新
主要是下面的代码,WEB 端代码文件 src\views\_uc-login\ucLogin.vue
可以看到,如下:
sendUpdateData(showVersion, version, xp_version, force, showInfo) {
// 是否能进行更新
let canUpdate = false;
if (ZX_CLIENT.config.isXP) {
this.downloadUrl = this.getV5BaseURL + this.fileAddress + "zxsetup_xp.exe";
canUpdate = true;
} else {
if (ZX_CLIENT.currentSystem === "darwin") {
// 先检查版本号
this.downloadUrl = this.getV5BaseURL + this.fileAddress + "zxsetup.dmg";
ZX_CLIENT.getVersion((e) => {
if (e.smallV == "316") {
// 显示弹窗警告
this.dialogFormVisible = true;
} else {
canUpdate = true;
}
});
} else {
this.downloadUrl = this.getV5BaseURL + this.fileAddress + "zxsetup.exe";
canUpdate = true;
}
}
let updateData = {
showVersion: showVersion,
version: version,
xp_version: xp_version,
url: this.downloadUrl,
force: force,
showInfo: showInfo,
};
setTimeout(() => {
if (canUpdate) {
ZX_CLIENT.checkUpdate(updateData);
}
}, 1200);
}
# ZX_CLIENT.checkUpdate(updateData)
执行自动更新
updateData
当前自动更新信息