Repository navigation
JavSP-fork v0.4.7
JavSP-fork v0.4.7 发布说明
派生自 Yuukiy/JavSP 的带 WEBUI 刮削器。本版本是一个纯修复版本:
修复「立即升级」失败后旧版本被藏进子目录、主目录看起来像文件全被删的问题。
无新增功能,Windows 桌面版可平滑升级。
本次要点
修复:升级失败后,文件"消失"实则被藏起来了
现象
在网络驱动器上点「立即升级」后,主目录里 JavSP.exe、config.yml、update/ 全部消失,只剩一个空的 _internal。数据其实完好,被移到了下一层目录:Downloads/JavSP/JavSP.bak/。
根因(两个缺陷叠加)
① 网络驱动器上整目录改名不可靠
QNAP 的 Downloads 共享(/share/Downloads 是符号链接 → CACHEDEV2_DATA/Downloads)拒绝枚举深层目录,Move-Item 改名运行目录时报「对路径 …\_internal 的访问被拒绝」,10 次重试全部失败。
(旁证:NAS 服务端 getfacl 显示权限完全正常,但 SMB 客户端一列该目录即被拒;单文件读取却正常 —— 纯 SMB 目录枚举问题,与权限无关。)
② 回滚逻辑写错了
Move-Item -Path $bak -Destination $exeDir 缺 -Force。此时目标目录已被复制步骤重建,于是该命令不是"替换",而是把备份移进该目录 → 变成 JavSP/JavSP.bak/,主目录因此"空无一物"。
修复
- 枚举预检(动数据之前):先用一次目录枚举探路。若"目录里有 exe 却列不出任何条目",说明该路径不支持改名,立即中止升级,一个字节都不动,并明确提示改用本地磁盘运行或手动下载 zip 覆盖。
- 回滚不再嵌套:先把不完整的新目录挪到
<运行目录>.failed,再把备份带-Force移回原位。 - 失败必留路径:无论成败,catch 块末尾都输出「运行目录 / 旧版备份 / 不完整副本」三个路径,并提示"若主目录里找不到 exe,请到旧版备份路径取回"。
安装 / 升级
Docker(推荐,NAS / 服务器)
docker load -i javsp-fork-0.4.7-image.tar.gz
docker restart javsp容器内版本以
/api/health返回的version为准;界面右下角显示版本号。
Windows 桌面版
- 下载
JavSP-0.4.7-windows.zip,解压到任意目录(便携,exe 同级即数据目录)。 - 升级已有安装:启动旧版 → 设置页「软件更新」→「立即升级」会自动完成下载、替换并保留
config.yml/.sessions.json/JavSP.log;或直接把新 zip 内容覆盖到旧目录(保留旧config.yml)。 - 首次使用请把自己的
config.yml放到 exe 同级。
强烈建议:桌面版装在本地磁盘(如
C:\JavSP)运行。
网络驱动器上的"整目录改名"类操作不可靠,升级必然失败。
NAS 上请用 Docker 形态。v0.4.7 起,升级助手会在动数据之前自行检测并中止,
不会再出现"文件看起来全没了"的情况,但升级仍需手动覆盖。
校验
下载后可用发布资产 javsp-fork-0.4.7.sha256 核对(含 windows.zip 与 image.tar.gz 两个值):
sha256sum -c javsp-fork-0.4.7.sha256回归验证
- 6 个指定回归用例文件 + 缩略图用例 + 本次新增 3 项,共 60/60 通过。
- Windows 桌面版 exe 实跑:
/api/health返回version=0.4.7、status=ok;
生成的升级助手脚本确认含枚举预检(Get-ChildItem)与不嵌套回滚(.failed)。 - NAS 部署后
/api/health返回version=0.4.7、container=true;前端资产名与构建一致;
容器内update.py确认含预检与.failed回滚逻辑;挂载卷config.yml未被改动。
附注
- 本版本 Docker 端仅同步源码(含本次修复),无容器运行时行为变化。
- 历史 CHANGELOG 中保留的早期部署位置描述(如本机安装目录、网盘共享名)属已发布记录,本次未做破坏性清洗。
- 完整变更见仓库
CHANGELOG_FORK.md的 v0.4.7 段。