niumasoftware/docs/开发.md
2026-04-07 23:21:58 +08:00

98 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 开发说明(开发 / 打包 / 安装 / 更新)
### 运行环境
- **系统**Windows 10/11
- **Python**:建议与当前项目一致的版本(你本机是 3.14
- **依赖**:见 `requirements.txt`
安装依赖:
```powershell
python -m pip install -r requirements.txt
python -m pip install pyinstaller
```
### 本地运行
```powershell
python main.py
```
### 版本号
- **版本号来源**`app_info.py` 里的 `__VERSION__`
- **安装包 AppVersion**:由 `installer/build_installer.py` 自动从 `app_info.py` 注入到 `installer/niumasoftware.generated.iss`
### 数据库存储与结构升级SQLite Migration
- **数据文件位置**:默认在 `%APPDATA%\CleanDesktopOrganizer\data.db`(不在安装目录,不会被覆盖更新影响)
- **结构升级**:在 `db/database.py` 内通过 `schema_version` 做版本化迁移
- 新增表/字段/索引:新增一个迁移版本并提升 `LATEST_SCHEMA_VERSION`
- 启动时 `init_db()` 自动从旧版本迁移到最新
### 一键打包(推荐)
项目根目录直接运行:
```powershell
.\build_installer.bat
```
它会自动完成:
- 清理 `build/`、`dist/`
- PyInstaller 打包主程序onedir`dist\niumasoftware\`
- PyInstaller 打包更新助手onefile`dist\niumasoftware\update_helper.exe`
- 生成 `installer\niumasoftware.generated.iss`
- 若检测到 Inno Setup 的 `ISCC.exe`,则自动编译安装包
### 手动打包PyInstaller
主程序onedir
```powershell
python -m PyInstaller --noconfirm --onedir --name niumasoftware --windowed `
--icon "logo.ico" `
--add-data "assets;assets" `
--add-data "logo.png;." `
main.py
```
更新助手onefile统一输出到 `dist\niumasoftware`
```powershell
python -m PyInstaller --noconfirm --onefile --name update_helper --console --distpath dist\niumasoftware `
--icon "logo.ico" `
update_helper.py
```
产物约定(用于安装包脚本):
- `dist\niumasoftware\niumasoftware.exe`
- `dist\niumasoftware\update_helper.exe`
### 生成安装包Inno Setup
1) 生成带版本号的最终脚本:
```powershell
python installer/build_installer.py
```
2) 用 Inno Setup Compiler 编译:
- `installer/niumasoftware.generated.iss`
### 全局安装后的静默覆盖更新(计划任务)
由于安装目录通常在 `Program Files`,普通权限无法覆盖 exe。
实现方式(已内置):
- 主程序下载更新到:`{commonappdata}\CleanDesktopOrganizer\updates\_update_new.exe`
- 写入请求:`{commonappdata}\CleanDesktopOrganizer\update_request.json`
- 触发计划任务:`schtasks /Run /TN CleanDesktopOrganizer\Update`
- 计划任务以 **SYSTEM** 执行 `{app}\update_helper.exe` 覆盖并重启