Windows 下程序运行时,exe 和这些 dll 文件被锁住,没法自己覆盖自己。所以"推送更新"本质都要拆成三步:
- 检查 —— 程序去网上拉一个版本清单,和本地版本号比对
- 下载 —— 下载新版
- 替换重启 —— 这一步必须由主程序之外的另一个东西(一个小 bat 脚本或独立的 updater.exe)来做:等主程序退出 → 覆盖文件 → 重新启动
使用托管的方式
- 网上放一个
update.json(版本号 + 下载地址 + 更新说明)和打好的完整 zip 包 - 程序启动时(或菜单「检查更新」)拉
update.json,比对版本号 - 有新版 → 下载 zip → 启动一个独立的 updater(bat 或小 exe)→ 主程序退出 → updater 解压覆盖 → 重启
优点:和 PyInstaller 完全兼容、可靠、流程标准;
缺点:每次下载完整包(几十 MB,内网/国内一般无所谓)。第一次配好以后,你的更新流程就是:改版本号 → 打包 → 上传 zip + 改 update.json → 用户端自动收到。
操作步骤
- 改 version.py的
__version__ = "1.1.0" - 将更新的程序压缩
- 在 Gitee 建
v1.1.0Release 传 zip - 改 update.json的 version/url → push 到 main 分支
自动更新原理
- 程序启动 2 秒后(或手动点按钮)从 Gitee 拉取仓库根目录的
update.json,比对版本号。 - 有新版本 → 下载 zip 到
%TEMP%→ 生成update.bat并 detached 启动 → 主程序退出。 update.bat等主程序退出后,解压 zip 覆盖程序目录,再启动新版本。- 运行日志:
%TEMP%\jlcan_update.log。