如何零成本实现软件更新方案[Python]

软件升级过程:

  1. 将要更新的版本信息发布至云
  2. 将更新包挂载至蓝奏云平台上
  3. 本地运行程序从云上获取版本信息和当前版本信息进行比对
  4. 实现更新

将要更新的版本信息发布至云

这个步骤采用一些在线自定义参数平台来作为我版本信息发布的平台,经过最近的资料搜集,发现ROLL提供的API非常好用(免费的,不是做广告)在线自定义参数 Api详情 - MXNZP.COM 穆仙念,人到中年

  1. 创建应用
  2. 获取用户创建的应用列表
  3. 给指定应用设置在线参数
  4. 获取指定应用的在线参数

当我设置完在线参数后,获取到的数据如下所示

在这里插入图片描述

将更新包挂载至蓝奏云平台上

我将自己写的安装包挂载在蓝奏云平台上,更新速度嗖嗖的,但是想要获取软件的直链有两个方法1.冲会员2.自己解析,并不是能轻松获得。

我这边自己解析了,我会出一期针对解析蓝奏云的教学博客,网上也有不少,但是时间久远了不是直接能用的,需要自己再花点时间处理一下。

本地运行程序从云上获取版本信息和当前版本信息进行比对

  1. 云上最新版本设置

在这里插入图片描述

  1. 本地版本配置

在这里插入图片描述

  1. 版本比对

当主程序运行时,首先运行更新程序,当云上的软件版本号大于本地版本号,执行更新程序,否则继续运行主程序。

实现更新

在更新上花了不少时间,我这边向大家推荐一种更新方法。

  1. 在软件目录下创建Temp中间文件夹
  2. 将安装包下载至Temp文件夹中,使用python库中的zipfile module解压安装包
  3. 解压完成后删除安装包
  4. 为了避免windows下不能删除正在运行的软件这个定义,编写一个update.bat脚本执行删除旧程序、从temp中复制新程序到软件目录中、自动重启程序。

写一个update.bat脚本执行删除旧程序、从temp中复制新程序到软件目录中、自动重启程序。

def write_update(self) -> None:
        """
            编写软件更新程序
            Args:
                None
            Returns:
                None
        """
        # 设置绝对路径
        base_path = os.getcwd()
        with open("update.bat","w") as f:
            temp = "echo 正在更新至最新版本...\n"
            temp += "timeout /t 10 /nobreak\n"
            temp += "del main.exe\n" #删除旧程序
            temp += "xcopy " + base_path + "\\temp " + base_path + " /e/y\n" #复制新版本程序
            temp += "echo 更新完成,正在启动...\n"
            temp += "timeout /t 3 /nobreak\n"
            temp += "start " + base_path + "\\main.exe\n"   
            temp += "exit"
            f.write(temp)
        f.close()
        # 退出程序
        self.pbtn_cancel.click()
        # 打开更新脚本
        os.system('start update.bat')  #显示cmd窗口
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐