# 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 应用自动更新工具 Python 3.6+ Windows MIT License Tkinter 一个轻量级、功能强大的 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