一种软件升级方案
- categories
- >
- others
使用 QtWidgets 构建的客户端软件,添加升级相关。其中局域网中一台电脑启动 nginx 的静态服务相关,下载对应的文件进行单体(单独的 exe 文件)和全量更新。
当前操作系统为 Windows11。
以个人项目 KnowIt 为例
- 其中半自动打包部分见:autobuild
- 客户端升级部分见:AutoUpdate
nginx 配置
添加 nginx.conf 配置:
http {
charset utf-8; # 设置默认编码为utf-8
# 端口 8010 -> KnowIt
server {
listen 8010;
server_name localhost;
location / {
root D:\work\output\KnowIt;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
charset utf-8;
}
}
}
root
指向对应的目录,charset utf-8;
防止乱码
然后启动 nginx.exe,访问目标端口
- latest 目录 是最新的组织好的未压缩的完整文件包
KnowIt_version_timestamp.exe
是使用 NSIS 进行打包的输出文件update.json
是最新的更新内容,主要用于更新update.txt
是所有更新记录,主要用于记录和展示
update.json
文件示例:
{
"url": "http://192.168.123.233:8010",
"file": "KnowIt_0.1.10_20250730_140427.exe",
"timestamp": "20250730_140427",
"description": "1. 修正DownloadHelper在Windows11下无法正常下载图片问题",
"version": "0.1.10"
}
update.txt
文件示例:
时间戳:20250730_131649
版本号:0.1.09
更新:1. 修复进入系统后的无ID编辑问题; 2. 修复单独exe无法更新问题; 3. 增加下载助手Tools-DownloadHelper,拖入网页图片进行下载
时间戳:20250730_140427
版本号:0.1.10
更新:1. 修正DownloadHelper在Windows11下无法正常下载图片问题
客户端
操作逻辑:
- 下载路径的设置:
如果选择单独的 exe 进行更新,直接定位到服务下的 latest/KnowIt.exe
文件进行下载;如果选择全量更新,获取对应的 update.json
内容,从中提取 file
和 url
字段进行组合
- 单独的 exe 更新代码逻辑
首先创建一个延时执行的bat
脚本,写入对应 exe 的路径和当前 exe 的路径,执行覆盖操作,然后使用exit(0)
立即退出当前程序(也可以使用bat
脚本,个人认为使用exit
简化操作)。
- 全量更新逻辑
直接使用 QProcess
启动安装包,后续安装交给安装包,包括当前程序的关闭,路径的查找等
comment:
- Valine
- LiveRe
- ChangYan