环境
- SessionRelay 0.5.1(npm 全局安装),Windows 11 (22631),Node v24 位于
C:\Program Files\nodejs\node.exe
srelay init --yes --install-service 方式部署
Bug
0.5.1 打包产物 dist/chunk-TLRVTGAH.js 的 windowsRunScript() 生成 watch cmd 时,args 里有空格会加引号,但 nodeAbs 本体是裸拼的:
const nodeAbs = process.execPath; // C:\Program Files\nodejs\node.exe
const args = buildWatchArgs(root).map(a => a.includes(" ") ? `"${a}"` : a).join(" ");
return [..., `${nodeAbs} ${args} >> "${logFile}" 2>&1`, ...]
生成的 watch-task.cmd 首行无引号 → cmd 按空格切分 → 'C:\Program' 不是内部或外部命令(watch.log 里能抓到)。
影响(比较阴)
--install-service 是直接 spawn 守护进程的(不走 cmd),装完 watch --status 显示一切正常
- cmd 只在登录自启时被用到 → 重启前看不出任何问题,重启后守护静默消失、会话捕获静默停摆,无任何告警
- 手工给 nodeAbs 加引号即恢复(日志出现
[srelay-watch] initial: +N 消息),但之后每次 --install-service 都会重新生成无引号版,修复被冲掉
复现步骤
- Windows + 默认路径 Node,
srelay init --yes --install-service
- 重启电脑(或手动运行生成的 watch-task.vbs)
type .sessionrelay\watch.log → 'C:\Program' 不是内部或外部命令;守护未启动
- 给 cmd 里的 node 路径加引号 → 链路恢复正常
建议修复
nodeAbs 与 args 同样处理:"${nodeAbs}" ${args}(含空格时加引号)——windowsRunScript 一行改动。
顺带两个小观察(0.5.1,非阻断)
srelay unresolved --json 疑似丢弃了 --json 标志(decisions 正常透传 JSON);空时输出人话文本而非 JSON
- stats.json 更新使用共享 .tmp 名 + rename,CLI 高并发时偶发 ENOENT(48 并发实测 2 例)
以上均在 Windows 11 实机复现。感谢这个项目——中文检索/零外呼/HOP 设计对我们非常实用。
环境
C:\Program Files\nodejs\node.exesrelay init --yes --install-service方式部署Bug
0.5.1 打包产物
dist/chunk-TLRVTGAH.js的windowsRunScript()生成 watch cmd 时,args 里有空格会加引号,但 nodeAbs 本体是裸拼的:生成的 watch-task.cmd 首行无引号 → cmd 按空格切分 →
'C:\Program' 不是内部或外部命令(watch.log 里能抓到)。影响(比较阴)
--install-service是直接 spawn 守护进程的(不走 cmd),装完watch --status显示一切正常[srelay-watch] initial: +N 消息),但之后每次--install-service都会重新生成无引号版,修复被冲掉复现步骤
srelay init --yes --install-servicetype .sessionrelay\watch.log→'C:\Program' 不是内部或外部命令;守护未启动建议修复
nodeAbs 与 args 同样处理:
"${nodeAbs}" ${args}(含空格时加引号)——windowsRunScript 一行改动。顺带两个小观察(0.5.1,非阻断)
srelay unresolved --json疑似丢弃了 --json 标志(decisions 正常透传 JSON);空时输出人话文本而非 JSON以上均在 Windows 11 实机复现。感谢这个项目——中文检索/零外呼/HOP 设计对我们非常实用。