我们编写软件的时候,通常都会对软件进行迭代开发,通过程序升级来修复BUG或增加新功能。尽管软件升级的方式各异,但是它们的基本原理都是差不多的,即用新版本的程序文件替换旧版本的程序文件。那么如何实现程序的版本升级呢?
软件升级的一般步骤如下:
- 在服务器上发布升级文件,提供升级文件的下载服务。
- 软件自动(定时触发)或手动检索服务器,对比当前程序版本号和最新发布的程序版本号,判断当前程序是否需要升级。
- 如果发现新版本程序,则询问用户是否下载并更新程序。
- 当用户选择下载并更新程序后,启动升级程序并关闭当前主程序。
- 升级程序下载升级文件到本地,删除并替换旧程序。
- 关闭升级程序,启动新程序。
至此,程序升级完毕。
我用Nginx作为升级文件服务器,用PySide6做了一个升级演示程序。
1、首先修改nginx.conf,在http配置中添加文件下载配置。
#download
limit_conn_zone $binary_remote_addr zone=perip:1m;
autoindex on; # enable directory listing output
autoindex_exact_size on; # output file sizes rounded to kilobytes, megabytes, and gigabytes
autoindex_localtime on; # output local times in the directory
limit_conn perip 1; # 每个ip的并发连接数
limit_rate 1024k; # 限制下载速度;
2、将升级文件拷贝到nginx存放页面的目录下。
其中升级文件的命名规则是文件名称+版本号,我们用浏览器测试一下。
3、启动主程序,当前版本号为1.0.0
4、点击“检查更新”按钮,查看服务器上的最新版本。
5、点击“下载更新”按钮,启动升级程序。
6、下载完成后,确认是否启动主程序。
7、启动主程序,版本号已经变为1.0.2,升级完成。
主程序代码如下:
import os
import re
import sys
import time
import traceback
import urllib.request
from packaging.version import Version
from PySide6 import QtCore
from PySide6.QtCore import Slot, Signal, QThread
from PySide6.QtWidgets import QWidget, QVBoxLayout, QApplication, QStyleFactory, QPushButton, QLabel, QHBoxLayout, \
QSpacerItem, QSizePolicy
APP_VERSION = '1.0.0'