Repository navigation
JavSP-fork v0.4.5
JavSP-fork v0.4.5 发布说明
派生自 Yuukiy/JavSP 的带 WEBUI 刮削器。本版本修复一个影响所有使用场景的缺陷:
桌面版「立即升级」此前在任何路径下都必然失败(本地盘与网络驱动器同样中招)。
无新增功能,Docker 与 Windows 桌面版均可平滑升级。
本次要点
修复:桌面版「立即升级」必然失败
现象
- 本地盘(
C:\JavSP):无法移动项,因为"C:\JavSP"处的项正在使用中—— 连续 3 次升级全部失败。 - 网络驱动器(
\\HOMENAS\Downloads\JavSP):另一个进程正在使用此文件—— 上一版引入的 10 次重试全部失败。
真正根因(与网络驱动器、WebView2 进程都无关)
升级流程第一步要把整个运行目录改名备份以完成替换,而升级助手却把自己的脚本、日志、安装包全部生成在这个目录内部:
- 写日志时
运行目录/update/apply_update.log处于打开状态; - 助手进程的工作目录继承自主进程(未显式设置
cwd),可能落在运行目录内。
Windows 上,只要待移动目录子树内存在未共享删除权限的打开句柄,或进程工作目录指向该目录,
该目录自身即处于"使用中",重命名必然失败 —— 与网络驱动器无关,本地盘同样中招。
(此前把根因归为「SMB 锁更粘」和「WebView2 孤儿进程」是误判:重试从不可能恢复。)
证据链(最小复现实验)
| 实验 | 条件 | 结果 |
|---|---|---|
| C | 干净目录 | 改名成功(基线) |
| B | 目录内有打开的文件句柄 | 失败 拒绝访问;关闭句柄后成功 |
| A | 子进程工作目录指向待移动目录 | 失败 另一个程序正在使用此文件 |
| D | 目录内有正在执行的 .ps1 |
成功(排除此项) |
对照实验:原版助手在副本上跑 → 复现上述日志原文;修复版 → 一次移动成功,落地新版本。
修复
- 助手的脚本 + 日志 + 安装包 + 进程工作目录全部搬到系统临时目录下的独立工作区,
与待升级目录彻底隔离 —— 待移动目录里不再留有任何助手正在使用的文件。 - 安装包改为搬移(而非复制)进工作区,升级后原位置不留残余。
- 助手收尾时清理旧目录遗留的
update/。 - 新增 5 项回归用例锁死这些隔离不变量,防止再犯。
安装 / 升级
Docker(推荐,NAS / 服务器)
docker load -i javsp-fork-0.4.5-image.tar.gz
docker restart javsp容器内版本以
/api/health返回的version为准;界面右下角显示版本号。
Windows 桌面版
- 下载
JavSP-0.4.5-windows.zip,解压到任意目录(便携,exe 同级即数据目录)。 - 升级已有安装:启动旧版 → 设置页「软件更新」→「立即升级」会自动完成下载、替换并保留
config.yml/.sessions.json/JavSP.log;或直接把新 zip 内容覆盖到旧目录(保留旧config.yml)。 - 首次使用请把自己的
config.yml放到 exe 同级。
若旧版升级曾失败并留下残留目录,可先把旧目录整个改名备份(例如
JavSP→JavSP_old),
再解压新版到JavSP,然后把旧目录里的config.yml复制回来。
校验
下载后可用发布资产 javsp-fork-0.4.5.sha256 核对(含 windows.zip 与 image.tar.gz 两个值):
sha256sum -c javsp-fork-0.4.5.sha256回归验证
- 6 个指定回归用例文件共 47/47 通过(新增 5 项针对本次缺陷)。
- 端到端真实验证:在
C:\JavSP的副本上走完整生产路径完成一次真实升级 ——
0.4.2 → 0.4.4 升级成功,旧目录已改名备份,config.yml完整保留,
升级日志中无任何Move-Item重试。 - Windows 桌面版 exe 实跑验证:
/api/health返回version=0.4.5、status=ok。 - NAS 部署后
/api/health返回version=0.4.5、container=true;前端资产名与构建一致;挂载卷config.yml未被改动。
附注
- 本版本 Docker 端仅同步源码(含本次修复),无容器运行时行为变化。
- 历史 CHANGELOG 中保留的早期部署位置描述(如本机安装目录、网盘共享名)属已发布记录,本次未做破坏性清洗。
- 完整变更见仓库
CHANGELOG_FORK.md的 v0.4.5 段。