# UpdateALL
**Repository Path**: soloxyq/update-all
## Basic Information
- **Project Name**: UpdateALL
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-12
- **Last Updated**: 2026-04-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# UpdateALL - Windows 应用自动更新工具
一个轻量级、功能强大的 Windows 应用程序自动更新工具,支持多种更新源、图形界面、命令行操作和服务管理。
## ✨ 核心特性
### 🎯 功能亮点
- **智能版本检测** - 自动识别应用版本(命令行输出或文件属性)
- **多源支持** - GitHub Releases、直接下载链接、JSON API、NPM 包、Git 项目
- **服务管理** - Git 项目自动编译、部署和服务状态监控
- **批量操作** - 支持管理和更新多个应用程序
- **安全可靠** - 自动备份原文件,支持文件占用时延迟更新
### 🖥️ 用户界面
- **图形界面(GUI)** - 现代化的 ttkbootstrap 界面,支持任务管理和服务监控
- **命令行模式(CLI)** - 适合脚本化和自动化场景
- **实时状态显示** - 版本对比、下载进度、更新状态、服务状态
### 🌐 网络功能
- **GitHub Token 支持** - 突破 API 限制(60→5000 次/小时)
- **HTTP/HTTPS 代理** - 支持配置代理服务器
- **智能缓存** - 5分钟 TTL 缓存减少重复请求
- **下载进度** - 实时显示下载进度和速度
- **断点续传** - 流式下载,节省内存
### 🔧 高级特性
- **Git 项目支持** - 自动拉取、编译、部署 Git 仓库项目
- **NPM 包管理** - 一键导入和管理所有 npm 全局包
- **预发布版本** - 支持 alpha、beta、rc 版本识别
- **备份管理** - 带时间戳的备份,自动清理旧备份
- **延迟替换追踪** - 记录和提醒需要重启完成的更新
---
## 🚀 快速开始
### 环境要求
- **操作系统**: Windows 7 及以上
- **Python 版本**: 3.6+
- **依赖**: ttkbootstrap, psutil, requests(通过 pip 安装)
### 安装
```bash
# 克隆项目
git clone https://github.com/your-repo/update-all.git
cd update-all
# 安装依赖
pip install ttkbootstrap psutil requests
# 或使用 requirements.txt(如果提供)
pip install -r requirements.txt
```
### 首次运行
```bash
# 启动 GUI 界面(默认)
python main.py
# 命令行模式
python main.py --cli --help
```
---
## 📖 使用指南
### 图形界面模式
#### 主界面功能
1. **更新管理选项卡**
- 添加、编辑、删除更新任务
- 批量检查和更新
- 实时进度显示
- NPM 包一键导入
2. **服务管理选项卡**
- Git 项目服务状态监控
- 启动/停止服务
- 查看服务日志
- 自动编译部署
#### 添加更新任务
1. 选择或输入 EXE 文件路径
2. 输入更新源 URL
3. 选择更新源类型:
- `GITHUB` - GitHub Releases
- `DIRECT` - 直接下载链接
- `JSON` - 自定义 JSON API
- `NPM` - NPM 全局包
- `GIT_REPO` - Git 仓库项目
4. 配置可选参数(版本命令、资产规则等)
5. 点击"添加任务"
#### Git 项目配置
点击"配置Git"按钮,设置:
- **仓库路径**: 本地 Git 仓库位置
- **编译步骤**: 可添加多个编译命令
- **服务配置**: 后端/前端启动命令
### 命令行模式
#### 基本用法
```bash
# 更新单个应用
python main.py --cli \
--exe "C:\Program Files\App\app.exe" \
--url "https://github.com/author/app/releases"
# 仅检查更新
python main.py --cli \
--exe "C:\Tools\tool.exe" \
--url "https://github.com/author/tool/releases" \
--dry-run
# 使用代理和 GitHub Token
python main.py --cli \
--proxy http://127.0.0.1:7890 \
--github-token ghp_xxxxxxxxxxxx \
--exe "app.exe" \
--url "https://github.com/user/repo/releases"
# 批量更新(从配置文件)
python main.py --cli
```
#### 命令行参数
| 参数 | 类型 | 说明 | 默认值 |
|------|------|------|--------|
| `--cli` | flag | 启用命令行模式 | - |
| `--exe` | string | 本地 EXE 文件路径 | - |
| `--url` | string | 更新源 URL | - |
| `--url-type` | choice | 更新源类型 | `github` |
| `--version-flag` | string | 版本检测命令 | `--version` |
| `--fallback-flag` | string | 备用命令 | `--help` |
| `--asset-rules` | string | GitHub 资产筛选规则 | `windows,amd64` |
| `--proxy` | string | HTTP/HTTPS 代理地址 | - |
| `--github-token` | string | GitHub API Token | - |
| `--dry-run` | flag | 仅检查版本,不执行更新 | - |
| `--force` | flag | 强制更新,忽略版本比较 | - |
---
## 🔧 配置文件
配置文件位置: `config.json`(项目根目录)
### 配置结构示例
```json
{
"exe": "C:\\Program Files\\App\\app.exe",
"url": "https://github.com/author/app/releases",
"url_type": "GITHUB",
"version_flag": "--version",
"fallback_flag": "--help",
"asset_rules": "windows,amd64",
"proxy": "http://127.0.0.1:7890",
"github_token": "ghp_xxxxxxxxxxxx",
"tasks": [
{
"exe": "C:\\Tools\\tool1.exe",
"url": "https://github.com/user/tool1/releases",
"url_type": "GITHUB",
"version_flag": "--version"
},
{
"exe": "D:\\devai\\new-api",
"url": "D:\\devai\\new-api",
"url_type": "GIT_REPO",
"git_config": {
"repo_path": "D:\\devai\\new-api",
"build_steps": [
{
"cmd": "bun run build",
"desc": "编译前端",
"cwd": "D:\\devai\\new-api\\web"
},
{
"cmd": "go build -o new-api.exe",
"desc": "编译后端",
"cwd": "D:\\devai\\new-api"
}
],
"start_backend": {
"cmd": "new-api.exe",
"cwd": "D:\\devai\\new-api"
}
}
}
]
}
```
---
## 📦 更新源详解
### GitHub Releases
自动获取 GitHub 仓库的最新发布版本。
**URL 格式**: `https://github.com///releases`
**资产规则**: 使用逗号分隔的关键词筛选下载文件
- 示例: `windows,amd64` 匹配包含这两个词的文件
- 自动回退到第一个 .exe 或 .zip 文件
### 直接下载链接
适用于固定 URL 的下载。
**URL 格式**: 直接指向文件的 URL
- 自动从文件名提取版本号
- 支持 HTTP Header 中的文件名
### JSON API
自定义 API 接口返回版本信息。
**期望的 JSON 格式**:
```json
{
"version": "1.2.3",
"download_url": "https://example.com/app.exe"
}
```
### NPM 全局包
管理通过 npm 安装的命令行工具。
**特点**:
- 自动检测已安装版本
- 一键导入所有全局包
- 使用 `npm install -g` 更新
### Git 仓库项目
管理本地 Git 项目的更新、编译和部署。
**功能**:
- 自动检测远程更新(commit hash)
- 支持自定义编译步骤
- 服务启动/停止管理
- 进程状态监控
---
## 🛡️ 高级功能
### GitHub Token 配置
突破 GitHub API 限制(60→5000 次/小时)
**方式 1: Personal Access Token(推荐)**
1. 访问 https://github.com/settings/tokens
2. 生成新 token(只需 `public_repo` 权限)
3. 在配置文件或 GUI 中设置
**方式 2: Device Flow**
```python
from updateall.github_auth import start_device_flow
success, token = start_device_flow('YOUR_CLIENT_ID')
```
### 版本检测机制
**方式 1: 命令行输出(优先)**
- 执行 `exe --version` 获取版本
- 支持自定义版本参数
- 正则提取版本号
**方式 2: Windows 文件属性(备选)**
- 读取 PE 文件版本信息
- 不需要执行程序
- 适用于 GUI 程序
### 备份管理
- 自动创建带时间戳的备份
- 格式: `app.exe.20251119_133000.bak`
- 最多保留 5 个历史备份
- 自动清理旧备份
### 延迟替换
当文件被占用时:
- 使用 Windows API 安排重启后替换
- 记录待替换任务
- 启动时提醒用户
---
## 🏗️ 项目架构
### 模块结构
```
update-all/
├── main.py # 主入口文件
├── updateall/ # 核心模块包
│ ├── core.py # 核心更新逻辑(UpdateTask 类)
│ ├── gui.py # Tkinter GUI 界面
│ ├── version.py # 版本检测与比较
│ ├── net.py # 网络请求与下载
│ ├── updater.py # 文件替换逻辑
│ ├── config.py # 配置文件管理
│ ├── npm.py # NPM 包管理
│ ├── git_project.py # Git 项目管理
│ ├── github_auth.py # GitHub 认证
│ ├── pending_tasks.py # 延迟任务追踪
│ ├── constants.py # 常量定义
│ └── utils.py # 工具函数
├── config.json # 配置文件(运行时生成)
└── updateall.log # 日志文件(运行时生成)
```
### 核心类
```python
class UpdateTask:
"""更新任务类 - 封装单个更新任务的所有逻辑"""
def get_local_version() -> tuple
def get_remote_info() -> dict
def check_update_needed(force) -> (bool, str)
def download(dst_dir, progress_callback) -> str
def replace_exe_file(new_file) -> (bool, str)
def execute(force, dry_run, progress_callback) -> (bool, str)
```
---
## 🐛 故障排除
### 常见问题
**Q: 无法检测到本地版本怎么办?**
- 尝试其他版本命令: `-v`, `-V`, `version`
- 使用 `--force` 强制更新
**Q: GitHub API 请求失败**
- 配置 GitHub Token 提高限制
- 设置代理服务器
- 等待限流重置(每小时)
**Q: 提示"目标文件被占用"**
- 关闭目标程序
- 重启计算机完成替换
- 检查进程管理器
**Q: 代理设置无效**
- 确认格式: `http://127.0.0.1:7890`
- 验证代理软件运行中
- 检查端口号正确
---
## 📊 性能优化
### 最近优化(2024.11)
#### Phase 1: 紧急修复
- ✅ GitHub API Token 支持(60→5000 次/小时)
- ✅ 下载进度实时反馈
- ✅ 详细的错误处理和日志
#### Phase 2: 功能增强
- ✅ 预发布版本支持(alpha/beta/rc)
- ✅ 自动备份管理(时间戳+数量限制)
- ✅ 延迟替换任务追踪
#### Phase 3: 代码重构
- ✅ 核心逻辑模块化(UpdateTask 类)
- ✅ 消除重复代码(约 400 行)
- ✅ 统一常量管理
- ✅ URL 类型标识符统一为英文
### 性能指标
- API 请求:83倍性能提升(Token)
- 缓存命中:减少 80% 重复请求
- 代码复用:CLI/GUI 共享核心逻辑
- 内存占用:流式下载大文件友好
---
## 🔐 安全建议
⚠️ **使用前请注意**
1. **验证更新源**: 确保 URL 来自可信来源
2. **先检查后更新**: 使用 `--dry-run` 先测试
3. **备份重要数据**: 虽然有自动备份,建议手动备份
4. **保护 Token**: 不要分享包含 Token 的配置文件
5. **代理安全**: 只使用可信的代理服务器
---
## 🤝 贡献指南
欢迎提交 Issue 和 Pull Request!
### 开发环境设置
```bash
# 克隆仓库
git clone https://github.com/your-repo/update-all.git
cd update-all
# 创建虚拟环境
python -m venv venv
venv\Scripts\activate # Windows
# 安装开发依赖
pip install -r requirements-dev.txt
```
### 代码规范
- 遵循 PEP 8 Python 风格指南
- 使用类型提示(Python 3.6+)
- 编写单元测试
- 更新文档
### 提交 Issue
请包含以下信息:
- 操作系统版本
- Python 版本
- 错误信息或日志
- 复现步骤
---
## 📄 许可证
本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。
---
## 🙏 致谢
- 感谢所有贡献者和用户的支持
- 特别感谢提供反馈和建议的社区成员
---
## 📮 联系方式
- 项目主页: [GitHub Repository](https://github.com/your-repo/update-all)
- Issue 追踪: [GitHub Issues](https://github.com/your-repo/update-all/issues)
- 讨论区: [GitHub Discussions](https://github.com/your-repo/update-all/discussions)
---
**最后更新**: 2024年11月
**版本**: 1.0.0
**作者**: UpdateALL Team