ChatGPTClaudeGrok / X / CursorGemini

DeepSeek Harness Windows 沙箱 0xC0000142:桌面端与 dsh web 分诊

故障排查发布于 2026-10-30作者: DeepSeek Plugin 插件市场
DeepSeek HarnessDSHWindows0xC0000142workspace-write桌面端dsh web沙箱
DeepSeek Harness 桌面版在 Windows 上开 workspace-write 后,所有 shell 都以 0xC0000142 退出且零输出。先用「桌面端还是 dsh web」分诊,再按控制台缺失、创建标志、路径 DACL 三条成因逐条处理。

一条最普通的 echo ok,在 Windows 桌面版的 workspace-write 下返回 0xC0000142,stdout 和 stderr 一个字都没有——这不是命令写错,是受限子进程在 DLL 初始化阶段就死了。 同一个 DSH、同一台机器,换成 dsh web 启动就正常,这一个对照就能把范围缩到「宿主形态」;社区在 Win11 26200 和 Win10 19045 上都复现过同一个形态(#10483、#10706)。

DeepSeek Harness 分诊:先问三个问题,别急着改配置

三个判据按顺序问:桌面端挂不挂、dsh web 挂不挂、是所有 exe 都挂还是只有 PowerShell 挂。三个答案组合起来,基本就能落到三条成因中的一条。

  1. 桌面端新建会话,权限选「工作区内修改」,让 Agent 执行 echo ok,记下退出码。看到 3221225794 或 0xC0000142 就进了这一类。
  2. 同一条命令切到「完全权限」(danger-full-access)再跑。能跑通,说明令牌构造、ACL、路径都没问题,故障只在受限路径上。
  3. 在同一个工作区改用 dsh web 启动(Node 宿主),切 workspace-write 再跑一次。这一步是整篇的分水岭。
  4. 如果手边有 --no-sandbox 之类的启动参数,也试一次;能起说明是 Chromium 的安装目录检查,不在本文范围。

对照结果可以直接查表:

桌面端dsh web判断方向
全挂正常控制台缺失(成因一)
全挂正常,且只有 PowerShell 挂PowerShell 的控制台依赖
全挂全挂路径 DACL(成因三)
加 --no-sandbox 能起—安装目录 ACL,另文处理

DSH插件 成因一:GUI 宿主没有控制台,受限子进程起不来

桌面端是 Electron GUI 子系统进程,天生没有控制台;受限令牌下子进程又建不出可用的控制台,conhost 初始化失败,进程在 DLL 初始化阶段就退出,所以没有任何输出。

  1. 确认宿主类型:任务管理器里看 DeepSeek Harness.exe 的父进程,如果是 explorer.exe,就是 GUI 启动。
  2. 用 dsh web 在同一个工作区复跑同一条命令。web 版由 node.exe 启动,从终端继承了真实控制台,整条 runner 链都有控制台。
  3. 如果 web 版正常,基本可以确认是「宿主无控制台」,不需要再动 ACL。
  4. 社区核对源码时还查了发布包:当前构建的 app.asar 里 ensureWindowsConsoleHost 和 AllocConsole 都是 0 处,说明那个「给 Electron 补控制台」的 trampoline 修复(a1caef3)没有进这个构建。

这也解释了为什么「从终端启动桌面版」同样失败:GUI 子系统进程不会附加父进程的控制台。

DeepSeek Harness 成因二:CREATE_NEW_CONSOLE 是真正的失败点

受限令牌加「需要新建控制台」的组合必挂;能继承已有控制台、或者完全不建控制台,都能正常起。六组宿主/标志对照把这一点钉死了。

社区做过一组 A–F 对照,只改宿主进程和 creationFlags:

组宿主标志结果
Anode.exe(有控制台)0(继承)成功
Bnode.exeCREATE_NEW_CONSOLE0xC0000142
Cnode.exeDETACHED_PROCESS成功
DDeepSeek Harness.exe(GUI)0(被迫新建)0xC0000142
EDeepSeek Harness.exeDETACHED_PROCESScmd 成功
FDeepSeek Harness.exe0powershell 5.1 失败

两个后续实验值得记:给 runner 加隐藏控制台(AllocConsole + SW_HIDE)后,PowerShell 的内置命令能跑了,但由它再去起外部程序仍然失败;改成 DETACHED_PROCESS 后 cmd 能跑,PowerShell 却连 -Command 都不执行,因为 PowerShell 的 ConsoleHost 需要真实控制台。

所以「加个隐藏控制台就好了」只对了一半:它证明了根因,但没解决句柄继承。

DeepSeek插件 成因三:路径 DACL 带外来包 SID,跑随包脚本

如果每条命令都挂、跟命令内容和 cwd 无关,还要考虑第三种:子进程必须读的某个路径,其 DACL 里带着别的 AppContainer 工具的包 SID,低完整性令牌打不开。

官方包的 README(packages/sandbox/sandbox-windows-acl/README.md)写明了两条已文档化的成因和一条结构性限制:

  1. 保活组(登录 SID + Everyone)不在令牌里。
  2. 子进程用 CREATE_NO_WINDOW / CREATE_NEW_CONSOLE 创建,README 注明控制台隔离不可用。
  3. 路径 DACL 带外来包 SID——以前的沙箱工具或旧版 DSH 给工作区、安装树盖过章,就会命中这一条。

针对第三条,包里带了一个诊断加修复脚本,用非受限身份运行:

powershell
& '<skill-dir>\scripts\diagnose-windows-sandbox-acl.ps1' `
  -Path '<workspace-or-install-dir>' `
  -RecoveryDir '<recovery-dir>'

脚本会备份并校验每一处 DACL 改动、在源头删除外来包 ACE、拒绝处理重解析点与托管应用目录,最后打印回滚命令。rc.2(687f282e)的发布包里已经有这个脚本,不用等 rc.3。

DeepSeek Harness 为什么卸载重装没有用

ACL 挂在目录上,不在程序文件里;卸载程序不会去补 ACE,清 AppData 也不会。所以「重装一遍」对这三条成因一条都不生效。

  1. 先别重装,按上面的分诊表确认方向。
  2. 需要跑修复脚本时,从非受限制的 PowerShell 窗口跑,不要在 DSH 沙箱里的 shell 跑。
  3. 脚本必须指定 RecoveryDir,改之前留备份,出问题按它打印的命令回滚。
  4. 如果脚本报「nothing to repair」,说明不属于第三条,回到成因一或成因二。
  5. 另有一种「重装后应用直接起不来」是卸载器留下的问题,和 shell 的 0xC0000142 是两件事,别混在一起查。

DSH插件 注意事项

下面这些做法会加重问题或掩盖真因,先避开再谈修复。

  1. 别让长期方案停在 danger-full-access。它是分诊工具,不是修复。
  2. 不要同时改令牌、ACL 和启动标志。一次一个变量,否则复现结果没有意义。
  3. --no-sandbox 只当信号用。它能起说明是安装目录访问检查那一层,长期这么跑等于关掉浏览器沙箱。
  4. Windows 10 和 Windows 11 都会命中。社区在 19045、22621 上都复现过,别以为是系统版本门槛。
  5. 先记版本号和提交。rc.2 与 rc.3 的差别会影响你判断「是不是已经修了」。

如果 dsh web 能跑、桌面端不能,最省事的临时方案就是先用 web 版干活;要留在桌面端,就得等宿主侧补上控制台 trampoline。相关排查见 DeepSeek Harness Windows 子进程报 0xC0000142:受限令牌与宿主定位。

ChatGPTClaudeGrok / X / CursorGemini

常见问题

Windows 桌面版开 workspace-write 后 DeepSeek Harness 所有命令都返回 0xC0000142 且无输出,第一步做什么?

先在 DeepSeek Harness 里做宿主对照:同一条 echo ok 分别用桌面端和 dsh web 跑一次。桌面端失败、dsh web 正常,就锁定「GUI 宿主没有控制台」这一条;两边都失败才去查路径 DACL。这个对照比改任何配置都省时间。

为什么从终端启动 DeepSeek Harness 桌面版,workspace-write 下的 pwsh 还是 0xC0000142?

因为 DeepSeek Harness 桌面端是 Electron GUI 子系统进程,不会附加父进程的控制台。社区实验里 A 组(node 宿主、继承控制台)能起,D 组(GUI 宿主、被迫新建控制台)必挂,差别只在宿主形态,与启动方式无关。

CREATE_NEW_CONSOLE 真的会让 DeepSeek Harness 的受限子进程报 0xC0000142 吗?

会造成,DeepSeek Harness 的受限子进程一旦需要新建控制台就会返回 0xC0000142。社区的六组对照里,只要受限子进程需要新建控制台就失败,能继承已有控制台或完全不建控制台则成功。给 runner 加隐藏控制台后 PowerShell 内置命令能跑,但它再去起外部程序仍然失败。

DeepSeek Harness 的 0xC0000142 能靠 diagnose-windows-sandbox-acl.ps1 修吗?什么时候该跑它?

只有当路径 DACL 里带着别的 AppContainer 包 SID 时,DeepSeek Harness 随包的这个脚本才有用。脚本随包提供,用非受限身份运行并指定 -Path 和 -RecoveryDir,会先备份再改,最后打印回滚命令。报 nothing to repair 就说明不属于这一类。

卸载重装 DeepSeek Harness 能不能解决 workspace-write 的 0xC0000142?

不能,重装 DeepSeek Harness 解决不了 workspace-write 的 0xC0000142。ACL 挂在目录上而不是程序文件里,卸载程序不会补 ACE,清 AppData 也不会。社区核对后明确说重装救不了这三条成因,只能按分诊表逐条定位。

相关术语

0xC0000142
0xC0000142 是 Windows 的 STATUS_DLL_INIT_FAILED 退出码,表示进程在加载器/DLL 初始化阶段失败,子进程连 stdout/stderr 都来不及产生。它在沙箱场景里通常指向控制台创建或令牌受限,而不是命令本身写错。— https://github.com/deepseek-ai/deepseek-harness/discussions/10483
workspace-write
workspace-write 是 DeepSeek Harness 的一种文件策略,允许在工作区内写入、对工作区外只读,通过受限令牌与 ACL 实现隔离。它承诺的是写入边界,不是「进程无法初始化」,所以初始化失败属于缺陷而非设计。— https://github.com/deepseek-ai/deepseek-harness
CREATE_NEW_CONSOLE
CREATE_NEW_CONSOLE 是 Windows CreateProcess 的创建标志,要求为新进程分配一个新控制台。在受限令牌下新建控制台会在 conhost 初始化阶段失败,是 0xC0000142 的已知触发点之一。— https://github.com/deepseek-ai/deepseek-harness/discussions/10706
diagnose-windows-sandbox-acl.ps1
这个 PowerShell 脚本是 deepseek-harness 沙箱包随附的诊断与修复工具(diagnose-windows-sandbox-acl.ps1),用于检查并清理路径 DACL 中外来的 AppContainer 包 ACE。它必须用非受限身份运行,会备份并校验每处改动,同时拒绝处理重解析点。— https://github.com/deepseek-ai/deepseek-harness/discussions/10789

来源