桌面应用
桌面版是 Tauri 2 外壳:Rust 进程负责窗口、托盘与更新,同时把打包好的后端 sidecar 拉起来,前端跑在 WebView 里。
安装
| 渠道 | 产物 | 依赖 |
|---|---|---|
fat | Hetu_x.y.z_x64-setup.exe / .msi | 无(自带 .NET 运行时) |
slim | Hetu.Slim._x.y.z_x64-setup.exe / .msi | 系统需安装 .NET 10 运行时 |
| Linux | .AppImage / .deb | AppImage 免安装 |
自动更新
- 清单来源顺序:GitHub 主源 → 三个加速镜像(
ghproxy.net/gh-proxy.com/ghfast.top)。 - 两个渠道各自独立的清单:
latest.json(fat)与latest-slim.json(slim),互不覆盖。 - 安装包带签名,校验失败会拒绝安装;安装模式为
passive(进度可见、少交互)。 - 导航栏版本号旁出现更新角标,点开可看本次更新内容。
安装包内置安装钩子:在覆盖文件前先结束可能残留的后端进程(
taskkill /F /IM Hetu.Api.exe),避免 sqlite-vec\vec0.dll 被占用导致安装失败。托盘与进程生命周期
| 行为 | 说明 |
|---|---|
| 关闭窗口 | 默认最小化到托盘,后端继续运行(后台任务不中断);可在设置 → 应用设置关闭该行为 |
| 退出 | 托盘菜单「退出 Hetu」:结束后端子进程后退出 |
| 异常退出 | 后端记住外壳进程号(HETU_PARENT_PID);检测到父进程消失会自行退出,不留孤儿进程占用端口 |
| 开发复用 | 开发期若 HETU_API_DEV_PORT 指定的端口已有后端,外壳复用它而不重复启动 |
安装目录与数据目录
| 路径(Windows 示例) | 内容 |
|---|---|
<安装目录>\Hetu (Slim).exe | 外壳可执行文件(fat 渠道为 Hetu.exe) |
<安装目录>\Hetu.Api.exe | 后端 sidecar(安装钩子会确保它没有在运行) |
<安装目录>\wwwroot\ | 前端静态资源(由后端提供) |
<安装目录>\sqlite-vec\vec0.dll | SQLite 向量扩展(被残留后端占用时会导致安装失败) |
%LOCALAPPDATA%\Hetu\hetu.db | 数据库(+ -wal / -shm) |
%LOCALAPPDATA%\Hetu\logs\ | 日志 |
安装钩子
src-tauri/nsis-hooks.nsh 在复制文件前执行(NSIS_HOOK_PREINSTALL):
!macro NSIS_HOOK_PREINSTALL
DetailPrint "Stopping leftover Hetu backend..."
nsExec::Exec '"$SYSDIR\taskkill.exe" /F /IM Hetu.Api.exe /T'
Pop $0
Sleep 500
!macroend工作树目录与自动清理
| 项 | 默认 / 可选项 |
|---|---|
| 根目录 | 仓库父目录下的 .hetu-worktrees/<仓库名>/<工作树名> |
| 自定义 | 设置 → 工作区:绝对路径,且不能位于仓库内部(会在保存时校验) |
| 清理条件 | 改动已合并(或远端分支已删除)+ 工作区干净 + 空闲超过阈值 |
| 清理间隔 | 1 / 6 / 12 / 24 小时,或关闭自动清理 |
| 是否删分支 | 默认只删工作树目录,分支保留;可改为连分支一起删 |
| 手动执行 | 设置页有「立即清理」按钮,返回检查 / 删除 / 保留的统计 |
数据位置
外壳通过 HETU_DATA_DIR 告诉后端数据目录:Windows 上是 %LOCALAPPDATA%\Hetu(hetu.db + WAL、logs/);迁移机器时整体拷贝该目录即可。
自己打包
# 1) 先出后端 sidecar(fat / slim 二选一)
pwsh ./scripts/publish-backend.ps1 -Mode SelfContained -Rid win-x64
pwsh ./scripts/publish-backend.ps1 -Mode FrameworkDependent -Rid win-x64
# 2) 再出安装包
cd shell/hetu-desktop
npm run tauri:build # fat
npm run tauri:build -- --config src-tauri/tauri.slim.conf.json # slimsidecar 命名必须符合 Tauri 约定:binaries/Hetu.Api-<rust-target-triple>(.exe)。
排障
| 现象 | 处理 |
|---|---|
安装报 Error opening file for writing | 有残留后端在占用文件:任务管理器结束所有 Hetu.Api.exe 后点重试;新版本安装包会自动处理 |
更新报 Could not fetch a valid release JSON | 清单没取到。用浏览器打开 releases/latest/download/latest.json(slim 是 latest-slim.json)确认可访问,再升级到最新版 |
| 窗口不见了 | 点托盘图标唤回;仍在后台运行(后端未退出) |