环境信息
操作系统 Windows 11(build 26200.8875,25H2;注册表 ProductName 显示为 Windows 10 Home China)
Node.js v24.16.0(安装于 D:\NodeJS)
npm 11.13.0
PowerShell 5.1.26100.8875(沙箱内为 ConstrainedLanguage 受限语言模式)
DeepSeek Harness v0.1.0-rc.6(npm 包 @deepseek-ai/dsh)
npm 全局前缀 D:\npm-global(由 C:\Users\m1354\.npmrc 的 prefix / cache 指定)
PATH 中的旧 npm 目录 C:\Users\m1354\AppData\Roaming\npm(排在 D:\npm-global 之前)
Claude Code 坏安装 v2.1.226(bin\claude.exe 缺失)/ 完好安装 v2.1.232
沙箱模式 workspace-write(Windows ACL 受限令牌 runner:windows-acl-run)
第一部分:DeepSeek Harness(DSH)沙箱类 Bug
以下 5 个问题均与 Windows 平台的沙箱实现(windows-acl-run)相关。
BUG-1
windows-acl-run fails permanently after its per-session temp dir is deleted (misleading "no sandbox backend usable" error)沙箱临时目录被清理后沙箱后端崩溃且不自愈,报错文案误导
P0 崩溃级
环境 Windows 11 (build 26200) · Node.js v24.16.0 · dsh v0.1.0-rc.6 · 沙箱模式 workspace-write(windows-acl-run)
复现步骤
清理用户临时目录:Remove-Item 'C:\Users\<用户名>\AppData\Local\Temp\*' -Recurse -Force(常规清理操作,会一并删除沙箱运行器自建的 Temp\dsh-XXXXXX 目录);
在已有 dsh 会话中执行任意沙箱命令,或重新运行 npx @deepseek-ai/dsh web。
预期行为 沙箱运行器自动重建临时目录,命令正常执行 / dsh web 正常启动。
实际行为 崩溃 / 全部沙箱命令失败。报错称"本机没有可用的沙箱后端",并提示去安装 bubblewrap / Landlock / sandbox-exec(均为其他平台的方案,对 Windows 用户极具误导性)。多次失败中引用的目录名 dsh-2hxmDi 完全不变,证明该目录是会话级固定路径,删除后不会重建。清理前崩溃链路上的 dsh-subprocess 日志目录同样位于 Temp 下,一并被删除后相关子进程日志写入即报 ENOENT。
错误信息
Error: sandbox mode "workspace-write" is requested but no sandbox backend is usable on this host; refusing to run the command unconfined. Install bubblewrap or run a Landlock-enforcing kernel (Linux), ensure sandbox-exec is usable (macOS), or ensure the ACL restricted-token runner can start (Windows) -- otherwise switch the consumer to danger-full-access. Runner failure: windows-acl-run: --temp is not an existing directory: C:\Users\m1354\AppData\Local\Temp\dsh-2hxmDi复制
临时规避(已验证): 以完全访问模式手工重建同名空目录 C:\Users\m1354\AppData\Local\Temp\dsh-2hxmDi 后,沙箱立即恢复。
建议修复 ① 运行器启动前对 --temp 执行 mkdir -p,或每次命令生成新的随机目录名;② 沙箱自身状态目录移出共享 %TEMP%(建议放入 DSH_HOME 下专用目录);③ 报错信息明确指出缺失的具体路径,而非"no sandbox backend is usable"。
BUG-2
Sandbox denial marker is swallowed by -ErrorAction SilentlyContinuePowerShell 的 SilentlyContinue 会吞掉沙箱拒绝标记
P2 诊断体验
环境 Windows 11 (build 26200) · PowerShell 5.1 · dsh v0.1.0-rc.6(workspace-write 沙箱)
复现步骤
执行一条会被文件沙箱拒绝的删除命令,加 -ErrorAction SilentlyContinue;
对比同一条命令去掉该参数后的输出。
预期行为 无论命令自身如何抑制错误,沙箱层的拒绝标记 [sandbox: file access denied under ...] 都应输出。
实际行为 加 SilentlyContinue 后标记消失,只剩 [exit code: 1],无法区分"沙箱拒绝"与"Windows ACL 拒绝",导致一次误判(把 OS 权限问题当成沙箱问题尝试提权)。
错误信息 (无标记时的典型输出)
(no output)
[exit code: 1]复制
建议修复 沙箱拒绝标记由外层执行器写入独立通道,不随命令自身的 stderr 抑制策略消失。
BUG-3
Restricted token blocks WMI/CIM and network-stat queries (Get-Volume access denied 0x80041003)受限令牌拦截 WMI/CIM 与端口查询,磁盘容量等只读信息无法获取
P1
环境 Windows 11 (build 26200) · Node.js v24.16.0 · dsh v0.1.0-rc.6(workspace-write 沙箱)
复现步骤
Get-Volume -DriveLetter C;
Get-NetTCPConnection -LocalPort 3080;
Get-PSDrive C。
预期行为 返回磁盘剩余空间与端口监听进程等只读信息。
实际行为 ① Get-Volume 报 WMI 拒绝访问;② Get-NetTCPConnection 无输出、退出码 1;③ Get-PSDrive 不报错但 Used/Free 均为 0(数据不可用)。
错误信息
Get-Volume : 拒绝访问
+ CategoryInfo : PermissionDenied: (MSFT_Volume:ROOT/Microsoft/...age/MSFT_Volume) [Get-Volume], CimException
+ FullyQualifiedErrorId : HRESULT 0x80041003,Get-Volume
[exit code: 1]
# Get-NetTCPConnection → 无任何输出,[exit code: 1]
# Get-PSDrive C → Used / Free 全部返回 0复制
实际影响: 无法在清理前/后向用户报告磁盘剩余空间变化;无法定位端口监听进程,只能绕道猜测。
建议修复 为受限令牌加入只读 WMI/CIM 查询白名单(MSFT_Volume、MSFT_NetTCPConnection 等),或由执行器提供受控的替代接口(直接透传磁盘空闲字节数)。
BUG-4
Start-Process -Verb RunAs silently no-ops inside sandbox (no UAC prompt, no error)沙箱内 UAC 提权静默失败:无弹窗、无报错、命令未执行
P1
环境 Windows 11 (build 26200) · PowerShell 5.1 · dsh v0.1.0-rc.6(workspace-write 沙箱)
复现步骤
Start-Process powershell -Verb RunAs -Wait -ArgumentList '-NoProfile','-Command','Remove-Item -LiteralPath ''C:\Windows\SoftwareDistribution\Download\*'' -Recurse -Force -ErrorAction SilentlyContinue';
换用 cmd 再试:Start-Process cmd -Verb RunAs -Wait -ArgumentList '/c','rd /s /q "C:\Windows\SoftwareDistribution\Download"';
检查目标目录是否变化。
预期行为 屏幕弹出 UAC 提示,用户确认后以管理员权限执行目标命令。
实际行为 两次尝试均立即返回、无输出、无任何错误;全程未出现 UAC 弹窗;目标目录 C:\Windows\SoftwareDistribution\Download 内 17,701 个文件(822.4 MB)原封不动。属"以为执行了其实没执行"的高危静默失败。
错误信息 (无任何输出,命令静默成功返回)
(no output)复制
建议修复 ① 文档明确"沙箱内不支持 UAC 提权";② 提供受控提权通道(用户审批后由非沙箱父进程代为执行);③ 至少让 Start-Process -Verb RunAs 在受限环境下抛错,而不是静默成功。
BUG-5
Runner preamble violates ConstrainedLanguage ("Cannot create type" errors on every command)执行器前导代码在受限语言模式下报错,每条命令产生固定噪音
P2
环境 Windows 11 (build 26200) · PowerShell 5.1(沙箱内 ConstrainedLanguage)· dsh v0.1.0-rc.6
复现步骤 在 workspace-write 沙箱中执行任意 PowerShell 命令。
预期行为 前导初始化代码在受限语言模式下无报错,输出编码正常设为 UTF-8。
实际行为 每条命令 stderr 固定出现两条"Only core types are supported"错误(.NET 静态类型构造在 ConstrainedLanguage 下被禁)。该段前导代码明显由执行器自动注入(命令本身不含这些语句)。
错误信息
Cannot create type. Only core types are supported in this language mode.
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : CannotCreateTypeConstrainedLanguage
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false);
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : CannotCreateTypeConstrainedLanguage复制
建议修复 前导代码改用受限模式允许的写法(仅对 $OutputEncoding 赋系统编码、或使用 chcp 65001),或检测到受限语言模式时跳过该段初始化。
第二部分:npm / Claude Code 生态类 Bug
本部分为 npm / Claude Code 生态类问题。
BUG-6
Stale global-prefix shims shadow working install after prefix change ("claude" not recognized)双全局前缀 + PATH 顺序导致坏 shim 遮蔽完好安装(claude 命令报错根因)
P1
环境 Windows 11 (build 26200) · Node.js v24.16.0 · npm 11.13.0 · 前缀已由 .npmrc 改为 D:\npm-global,旧目录 C:\Users\m1354\AppData\Roaming\npm 仍在 PATH 且排序靠前
复现步骤
通过 .npmrc 把 npm 全局前缀从 %APPDATA%\npm 改为 D:\npm-global(旧目录的 shim 不会被清理);
旧目录下存在残破的 claude shim(指向已不存在的 bin\claude.exe);
在任意终端执行 claude。
预期行为 命令解析到 PATH 中任何一份可用的 claude 安装(或至少给出明确指引)。
实际行为 因 PATH 顺序,命令命中旧目录的坏 shim 直接报错;D:\npm-global 下完好的 v2.1.232 安装被完全遮蔽。
错误信息
'"C:\Users\m1354\AppData\Roaming\npm\\node_modules\@anthropic-ai\claude-code\bin\claude.exe"' 不是内部或外部命令,也不是可运行的程序
或批处理文件。复制
本次处理 删除旧目录 3 个 shim(claude / claude.cmd / claude.ps1)与死包 v2.1.226(约 575 MB)后恢复。
建议修复 npm 在 prefix 配置变更时提示(或提供命令)清理旧前缀目录中的遗留 shim;用户侧排查可用 npm prefix -g + where claude 定位。
BUG-7
Claude Code self-update interruption leaves bin\claude.exe missing with no self-healClaude Code 自更新中断后 bin\claude.exe 缺失,启动时无自愈
P1
环境 Windows 11 (build 26200) · @anthropic-ai/claude-code v2.1.226(npm 全局安装)
复现步骤
Claude Code 执行原生自更新;
更新过程中断(进程被杀 / 杀软拦截 / 磁盘满等);
再次执行 claude。
预期行为 更新失败后回滚到旧版本,或下次启动时自动从备份/平台包恢复。
实际行为 bin\ 目录下只剩 claude.exe.old.1786665880250(287 MB),真正的 bin\claude.exe 缺失;package.json 的 bin 字段仍指向 bin/claude.exe → 全部 shim 失效。platform 包 @anthropic-ai/claude-code-win32-x64 中的 exe 完好存在但未被放回。postinstall(install.cjs)只在 npm 安装时运行,命令启动时无任何检测修复。
错误信息 (目录状态,非报错文本)
node_modules\@anthropic-ai\claude-code\bin\
├── claude.exe.old.1786665880250 (287,053,472 bytes) ← 仅存此备份
└── claude.exe (缺失 → 所有 claude shim 报"不是内部或外部命令")
node_modules\@anthropic-ai\claude-code\node_modules\@anthropic-ai\claude-code-win32-x64\
└── claude.exe (完好,但未被复制回 bin\)复制
建议修复 更新采用"下载到临时名 → 原子替换";cli-wrapper.cjs 启动时检测 bin\claude.exe 缺失,自动从 .old 备份或平台包恢复。
BUG-8
D:\NodeJS\npm.ps1 wrapper: uninitialized $LASTEXITCODE and doubled-backslash pathnpm.ps1 包装脚本引用未定义变量 + 路径双反斜杠拼接
P2
环境 Windows 11 (build 26200) · Node.js v24.16.0(D:\NodeJS)· npm 11.13.0 · PowerShell 5.1
复现步骤 在 PowerShell 中调用任意 npm 命令(命令解析会命中 D:\NodeJS\npm.ps1)。
预期行为 包装脚本静默转发到 npm.cmd / node.exe,无报错。
实际行为 每次调用固定报"变量 $LASTEXITCODE 未设置";且其内部拼出的 D:\NodeJS\\node.exe(双反斜杠)路径无效,导致部分内部调用(npm-prefix.js)实际执行失败。
错误信息
检索不到变量"$LASTEXITCODE",因为未设置该变量。
所在位置 D:\NodeJS\npm.ps1:17 字符: 5
+ if ($LASTEXITCODE -ne 0) {
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (LASTEXITCODE:String) [], RuntimeException
+ FullyQualifiedErrorId : VariableIsUndefined
'CALL "D:\NodeJS\\node.exe" "D:\NodeJS\\node_modules\npm\bin\npm-prefix.js"' is not recognized as an internal or external command,
operable program or batch file.复制
建议修复 ① 引用前先初始化 $global:LASTEXITCODE = 0,或用 $? / $PSNativeCommandUseErrorActionPreference;② 路径拼接改用 Join-Path,避免手拼反斜杠出现双反斜杠。
BUG-9
Interrupted update leaves ~575 MB of stale .old backups plus duplicate installs更新中断残留 .old 备份与双安装并存,冗余约 575 MB
P3
环境 Windows 11 (build 26200) · @anthropic-ai/claude-code v2.1.226(旧)与 v2.1.232(新)双全局安装
复现步骤 发生 BUG-6/7 之后检查两个全局前缀目录的占用。
预期行为 更新成功或失败后不应长期残留 .old 备份与双份完整安装。
实际行为 旧目录中 claude.exe.old.*(287 MB)与平台包 exe(287 MB)并存,合计约 575 MB 死数据;用户完全无感知。正常安装中 bin\claude.exe 与平台包 exe 为硬链接(install.cjs 的 linkSync 设计,不重复占空间),冗余完全来自更新中断残留与双前缀并存。
错误信息 (占用统计)
C:\Users\m1354\AppData\Roaming\npm\node_modules\@anthropic-ai\claude-code\
├── bin\claude.exe.old.1786665880250 287,053,472 bytes
└── node_modules\...\claude-code-win32-x64\claude.exe 287,053,472 bytes
(合计约 574 MB,2026-08-14 会话中已清理)复制
建议修复 更新器为 .old 备份设置清理策略(例如新版本成功启动一次后自动删除),并避免双前缀安装长期并存。
本报告由实际操作记录整理生成 · 2026-08-14 · 环境参数经 node -v / npm -v / 注册表 实测核实