MRobot/自动更新功能说明.md
2025-10-13 11:20:19 +08:00

4.7 KiB

自动更新功能使用说明

功能概述

MRobot 现在支持完整的自动更新功能,包括:

  • 自动检查更新
  • 自动下载更新包
  • 自动解压安装
  • 自动重启程序
  • 更新失败回滚

使用方法

1. 启动时自动检查更新

程序启动 3 秒后会自动在后台检查更新。如果发现新版本,会显示通知提示。

2. 手动检查更新

在"关于"页面点击:

  • 自动更新: 打开完整的自动更新对话框
  • 手动检查: 检查更新并在浏览器中打开下载页面

3. 自动更新流程

  1. 点击"自动更新"按钮
  2. 系统自动检查是否有新版本
  3. 如有更新,显示版本信息和更新说明
  4. 点击"开始更新"确认更新
  5. 系统自动完成:
    • 下载更新包
    • 备份当前文件
    • 解压安装新版本
    • 重启程序

技术实现

核心组件

  1. AutoUpdater (auto_updater.py)

    • 主要更新逻辑
    • 多线程下载和安装
    • 错误处理和回滚
  2. UpdateDialog (update_dialog.py)

    • 用户界面
    • 进度显示
    • 用户交互
  3. QuickUpdateChecker

    • 后台更新检查
    • 通知显示

更新检查逻辑

# 检查 GitHub Releases API
url = f"https://api.github.com/repos/{repo}/releases/latest"
response = requests.get(url, timeout=10)
release_data = response.json()

# 比较版本号
from packaging.version import parse as vparse
if vparse(latest_version) > vparse(current_version):
    # 有新版本可用

下载逻辑

# 根据操作系统选择合适的安装包
system = platform.system().lower()
if system == 'windows':
    # 查找 .exe 或 .zip 文件
elif system == 'darwin':  # macOS
    # 查找 .dmg 或 .zip 文件
elif system == 'linux':
    # 查找 .tar.gz 或 .zip 文件

安装逻辑

  1. 备份当前文件

    # 备份重要文件到临时目录
    backup_files = ['MRobot.py', 'app/', 'assets/']
    
  2. 解压新版本

    # 支持 .zip 和 .tar.gz 格式
    with zipfile.ZipFile(file_path, 'r') as zip_ref:
        zip_ref.extractall(extract_dir)
    
  3. 复制文件

    # 替换应用程序文件
    shutil.copytree(src_path, dst_path)
    
  4. 重启程序

    # 启动新进程并退出当前进程
    subprocess.Popen([executable])
    sys.exit(0)
    

配置选项

update_config.py 中可以配置:

# 基本设置
AUTO_UPDATE_ENABLED = True           # 启用自动更新
AUTO_UPDATE_ON_STARTUP = True        # 启动时检查
UPDATE_CHECK_INTERVAL = 3000         # 检查延迟(毫秒)

# 下载设置
DOWNLOAD_TIMEOUT = 300               # 下载超时
CHUNK_SIZE = 8192                   # 下载块大小

# 备份设置
CREATE_BACKUP = True                 # 创建备份
BACKUP_IMPORTANT_FILES = [...]       # 备份文件列表

安全考虑

  1. 数字签名验证 (未实现,可扩展)

    • 验证下载文件的数字签名
    • 确保文件来源可信
  2. 备份和回滚

    • 更新前自动备份
    • 更新失败自动回滚
  3. 用户确认

    • 所有更新操作需要用户确认
    • 不会自动静默更新

故障排除

常见问题

  1. 网络连接问题

    • 检查网络连接
    • 检查防火墙设置
    • 尝试手动更新
  2. 权限问题

    • 确保程序有写入权限
    • 以管理员身份运行(Windows)
  3. 文件被占用

    • 关闭其他实例
    • 重启计算机后再试

错误日志

更新过程中的错误会显示在界面上,并可在控制台查看详细信息。

手动回滚

如果自动回滚失败,可以:

  1. 从临时目录恢复备份文件
  2. 重新下载完整安装包
  3. 联系技术支持

开发者信息

扩展功能

可以在现有基础上添加:

  1. 增量更新

    • 只下载变更的文件
    • 减少下载时间和流量
  2. 多源下载

    • 支持多个下载镜像
    • 提高下载成功率
  3. 版本回退

    • 支持回退到指定版本
    • 版本历史管理
  4. 自定义更新源

    • 支持企业内部更新服务器
    • 自定义更新策略

API 接口

# 检查更新
update_info = check_update_availability(current_version)

# 启动自动更新
dialog = UpdateDialog(current_version, parent)
dialog.exec_()

# 后台检查
QuickUpdateChecker.check_and_notify(version, parent)

注意事项

  1. 确保 GitHub Releases 中有对应平台的安装包
  2. 安装包命名要规范,便于识别平台
  3. 更新说明要写在 Release Notes 中
  4. 版本号要遵循语义化版本规范 (如: v1.0.5)

版本兼容性

  • PyQt5 5.x+
  • Python 3.7+
  • requests 2.x+
  • packaging 20.x+

支持的操作系统:

  • Windows 7+
  • macOS 10.12+
  • Ubuntu 18.04+