点击上方↑↑↑蓝字[协议分析与还原]关注我们
近期在为一系列python工具exe程序加自动更新功能,方便管理维护及分发。
近期沉迷于python的开发,积累了一系列python工具,需要部署到其它机器上,部署的过程都是拷贝,拷贝一次也就罢了,一碰到程序没写好,需要升级,就很麻烦了,得再拷贝一次,说不定还拷错了,烦死个人。
于是决定做个能够匹配我工具升级需求的自动更新工具,每台待安装电脑的第一次手动安装完整程序,之后每次程序启动的时候自动升级,从服务器上下载升级包,覆盖旧程序,完成升级。
由于我的python工具的特殊性,是由pyinstaller打包成exe的py文件以及一批网页文件组成,因此升级包需要综合考虑,不能顾头不顾腚。
01
—
自动更新框架
毫无疑问,我们的整个程序的更新应该是C/S架构,服务端存放安装包和版本更新控制服务,客户端每次启动时与服务器通信检查更新,如果有更新则用更新替换现有版本,之后进入工具主流程。
为了客户端的灵活性,我们选择客户端启动更新与客户端主体功能分离,二者独立实现,在启动更新部分实现自动更新功能并完成主体功能的启动,主体功能使用单独的进程实现,这样自动更新就只需要关心更新部分,相对稳定,而工具主体部分,则可随意根据项目调整。
大概就是这样:
框架基本上就是这样了,一个服务端程序,一个启动程序,一个主体程序。服务端程序另外开发,我直接用php开发了个简单的服务接口,校验请求参数及返回程序升级包即可,启动程序负责更新启动部分,主体程序负责工具主体部分,二者用python开发,用脚本统一打包。
02
—
启动程序
启动程序负责与服务器联系,进行自动更新,自动更新完毕启动主体程序。
启动程序大概功能实现如下:
def main(process_name):
controlstop_process(process_name) # 停止exe
current_dir = os.getcwd()
local_exe_path = os.path.join(current_dir, process_name)
&nbs