# 自动更新功能使用说明 ## 功能概述 MRobot 现在支持完整的自动更新功能,包括: - ✅ 自动检查更新 - ✅ 自动下载更新包 - ✅ 自动解压安装 - ✅ 自动重启程序 - ✅ 更新失败回滚 ## 使用方法 ### 1. 启动时自动检查更新 程序启动 3 秒后会自动在后台检查更新。如果发现新版本,会显示通知提示。 ### 2. 手动检查更新 在"关于"页面点击: - **自动更新**: 打开完整的自动更新对话框 - **手动检查**: 检查更新并在浏览器中打开下载页面 ### 3. 自动更新流程 1. 点击"自动更新"按钮 2. 系统自动检查是否有新版本 3. 如有更新,显示版本信息和更新说明 4. 点击"开始更新"确认更新 5. 系统自动完成: - 下载更新包 - 备份当前文件 - 解压安装新版本 - 重启程序 ## 技术实现 ### 核心组件 1. **AutoUpdater** (`auto_updater.py`) - 主要更新逻辑 - 多线程下载和安装 - 错误处理和回滚 2. **UpdateDialog** (`update_dialog.py`) - 用户界面 - 进度显示 - 用户交互 3. **QuickUpdateChecker** - 后台更新检查 - 通知显示 ### 更新检查逻辑 ```python # 检查 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): # 有新版本可用 ``` ### 下载逻辑 ```python # 根据操作系统选择合适的安装包 system = platform.system().lower() if system == 'windows': # 查找 .exe 或 .zip 文件 elif system == 'darwin': # macOS # 查找 .dmg 或 .zip 文件 elif system == 'linux': # 查找 .tar.gz 或 .zip 文件 ``` ### 安装逻辑 1. **备份当前文件** ```python # 备份重要文件到临时目录 backup_files = ['MRobot.py', 'app/', 'assets/'] ``` 2. **解压新版本** ```python # 支持 .zip 和 .tar.gz 格式 with zipfile.ZipFile(file_path, 'r') as zip_ref: zip_ref.extractall(extract_dir) ``` 3. **复制文件** ```python # 替换应用程序文件 shutil.copytree(src_path, dst_path) ``` 4. **重启程序** ```python # 启动新进程并退出当前进程 subprocess.Popen([executable]) sys.exit(0) ``` ## 配置选项 在 `update_config.py` 中可以配置: ```python # 基本设置 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 接口 ```python # 检查更新 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+