Skip to content

JavSP-fork v0.4.5

Choose a tag to compare

@luckwalter luckwalter released this 26 Oct 03:55
· 7 commits to master since this release

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 桌面版

  1. 下载 JavSP-0.4.5-windows.zip,解压到任意目录(便携,exe 同级即数据目录)。
  2. 升级已有安装:启动旧版 → 设置页「软件更新」→「立即升级」会自动完成下载、替换并保留 config.yml / .sessions.json / JavSP.log;或直接把新 zip 内容覆盖到旧目录(保留旧 config.yml)。
  3. 首次使用请把自己的 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 段。