mirror of
https://github.com/goldenfishs/MRobot.git
synced 2025-11-02 12:33:10 +08:00
224 lines
4.7 KiB
Markdown
224 lines
4.7 KiB
Markdown
# 自动更新功能使用说明
|
|
|
|
## 功能概述
|
|
|
|
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+ |