pyinstaller打包的python exe程序实现自动更新

点击上方蓝字[协议分析与还原]关注我们


近期在为一系列python工具exe程序加自动更新功能,方便管理维护及分发。

近期沉迷于python的开发,积累了一系列python工具,需要部署到其它机器上,部署的过程都是拷贝,拷贝一次也就罢了,一碰到程序没写好,需要升级,就很麻烦了,得再拷贝一次,说不定还拷错了,烦死个人。

于是决定做个能够匹配我工具升级需求的自动更新工具,每台待安装电脑的第一次手动安装完整程序,之后每次程序启动的时候自动升级,从服务器上下载升级包,覆盖旧程序,完成升级。

由于我的python工具的特殊性,是由pyinstaller打包成exe的py文件以及一批网页文件组成,因此升级包需要综合考虑,不能顾头不顾腚。

01

自动更新框架

毫无疑问,我们的整个程序的更新应该是C/S架构,服务端存放安装包和版本更新控制服务,客户端每次启动时与服务器通信检查更新,如果有更新则用更新替换现有版本,之后进入工具主流程。

为了客户端的灵活性,我们选择客户端启动更新与客户端主体功能分离,二者独立实现,在启动更新部分实现自动更新功能并完成主体功能的启动,主体功能使用单独的进程实现,这样自动更新就只需要关心更新部分,相对稳定,而工具主体部分,则可随意根据项目调整。

大概就是这样:

32c1a0be4fd5f377c5e1a3b4356d6b0a.png

框架基本上就是这样了,一个服务端程序,一个启动程序,一个主体程序。服务端程序另外开发,我直接用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值