Skip to content

Windows: pwsh 窗口反复显示并抢占前台焦点 #35

Description

@jian45154

问题描述

在 Windows 上使用 DSH Desktop 时,Harness 执行 PowerShell 命令会反复打开用户可见的 pwsh 窗口,并将该窗口切换为前台活动窗口。

这会中断用户在其他应用中的键盘输入和鼠标操作;当 Agent 连续执行多个 PowerShell 命令时,焦点会被重复抢占,严重影响正常使用电脑。

复现步骤

  1. 在 Windows 11 上从当前 main 启动 DSH Desktop(npm run dev)。
  2. 打开任意工作区并创建会话。
  3. 让 Agent 执行会调用 pwsh 的工具操作。
  4. 观察每次调用时出现的 PowerShell 窗口。

实际行为

  • pwsh 窗口对用户可见。
  • 窗口会被切换为前台活动窗口。
  • 连续工具调用会反复打断用户当前正在操作的应用。

预期行为

DSH Desktop 启动的 Harness、PowerShell 和其他后台工具子进程应保持隐藏,不创建用户可见的控制台窗口,也不应改变 Windows 当前的前台活动窗口。

环境

  • OS: Microsoft Windows 11 Pro for Workstations 10.0.26200
  • Architecture: Windows x64
  • DSH Desktop: current main, commit d8fa20fb9b8aa71fdebbeae9a452e095620818b8
  • Node.js: v24.14.1
  • npm: 11.16.0
  • Electron: 43.4.0
  • DSH: 0.1.0-rc.6

初步代码调查

桌面层启动 Harness 时已经设置了 windowsHide: true

但 Harness 内部的本地 subprocess 创建路径没有传入 windowsHide

Windows ACL sandbox 路径还明确说明,为避免 restricted token 下的 STATUS_DLL_INIT_FAILED,当前有意不使用 CREATE_NO_WINDOW / CREATE_NEW_CONSOLE,子进程共享宿主控制台:

因此问题看起来发生在 Harness 内部的 PowerShell/subprocess 路径,而不是 DSH Desktop 最外层 Harness 启动过程。以上只是初步判断,仍需要在打包版本和 sandbox/non-sandbox 两条路径分别验证。

建议验证方向

  • 分别验证 danger-full-access 与 Windows ACL sandbox 模式是否都会复现。
  • 非 sandbox 路径可检查 Windows 下使用 windowsHide: true 是否足够。
  • ACL restricted-token 路径不应直接采用已知不兼容的 CREATE_NO_WINDOW;可评估 STARTF_USESHOWWINDOW | SW_HIDE 是否能隐藏窗口,同时保留当前 console/stdio 语义。
  • 增加 Windows 回归测试,并在真实 Windows runner 上确认执行 pwsh 不改变前台窗口。

重复问题检查

已搜索本仓库及 deepseek-ai/deepseek-harness 的公开 Issues/PR,暂未找到描述“PowerShell 窗口反复显示并抢占焦点”的现有报告。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions