dsh-web-service:把 `dsh web` 托管为 Windows 服务

前言

DeepSeek Harness 的 dsh web 以前台进程方式跑 Web UI:关掉命令行窗口,界面就没了;用户注销或机器重启后,也不会自动恢复。若希望局域网里有一台「随时能连」的 DSH 主机,需要把进程交给 Windows 服务控制管理器(SCM)托管。

普通 Node 程序不能直接注册为 Windows 服务——SCM 要求调用 StartServiceCtrlDispatcher 并周期性上报心跳,否则约 30 秒会被判定无响应而终止。因此实践中要用 nssm 或 WinSW 等原生包装器夹在 SCM 与 node.exe 之间。手工配包装器时,LocalSystem 下 ~ 指向系统配置目录、DSH_HOME 与 profile 路径、日志轮转与重启策略等细节容易踩坑。下面介绍社区插件 dsh-web-service(维护者 zheyuanlinye7),它用 MCP 工具与 CLI 把这些步骤一次性做对,并附带基于真实故障日志的诊断能力。

这是什么

dsh-web-service 是 DeepSeek Harness 生态里的客户端类插件:不修改 dsh 本体,也不替你下载 nssm / WinSW 二进制,只使用本机已有的包装器,生成完整服务参数并注册、启停、诊断。当前 package 版本为 0.1.0,许可证 MIT,平台限制 Windows(win32),Node.js >= 22,dsh 引擎声明为 >=0.2.0-rc.1 <0.3.0。

目录页:SkillHub - dsh-web-service
源码与文档:GitHub - zheyuanlinye7/dsh-web-service

核心功能

安装与修复服务

插件会探测 node、@deepseek-ai/dsh/lib/bin.js、$DSH_HOME、profile 目录、nssm 或 WinSW,生成完整参数并注册服务,启动后探测端口是否可用。

诊断

解析服务日志,将「起不来」的原因翻译为可读结论,例如端口被占用、profile 插件与新版本 dsh peer 不兼容、插件树加载失败、profile 目录不存在、权限被拒,并给出可执行的修复建议。README 说明:诊断规则来自真机日志样本,不是假想场景。

控制与预演

  • 控制:start / stop / restart,并等待 SCM 报告新状态,而不是仅依赖 sc start 的退出码。
  • plan:只读预演,打印将要执行的命令与将要写入的文件,不落盘。

两种包装器

支持 nssm(公有领域)与 WinSW(MIT),自动探测路径;也可用 --nssm / --winsw 显式指定。

它不做什么

  • 不打包、不下载任何第三方可执行文件。
  • 不 patch DSH 源码,不改变 dsh 的监听绑定逻辑。
  • status、plan、diagnose 为只读,无需管理员;install / uninstall / start / stop 需要提权。

安装与启用 MCP

从 GitHub 安装到 web profile:

dsh plugin --profile web add "github:zheyuanlinye7/dsh-web-service"

安装完成后重启一次 dsh。插件包中的 cordis.patch.yml 会挂载 MCP 客户端,但默认关闭(避免装包即获得管理员级能力):

- id: mcp-dsh-web-service
  name: '@deepseek-ai/dsh-mcp-client'
  disabled: true

若希望由 agent 管理服务,在 DSH Plugins 页面启用该项(或将 disabled 改为 false)后再重启。

前置条件

  • Windows,Node.js 22+
  • 本机已放置 nssm 或 WinSW(PATH 或常见目录下插件可自动发现;见 README 中的探测范围说明)

典型用法

命令行

先看现状,再预演,最后在管理员终端安装;起不来时用诊断:

npx dsh-web-service status
npx dsh-web-service plan
npx dsh-web-service install
npx dsh-web-service diagnose

通过 MCP 让 agent 操作

启用 MCP 后,可直接说明需求,例如:把 dsh web 装成 Windows 服务,端口 3080,开机自启。可用工具包括 mcp__winsvc__service_status、service_plan、service_install、service_uninstall、service_control、service_diagnose、service_logs(名称与作用见仓库 README 表格)。

常用配置

CLI 与 MCP 共用一组选项(CLI 用 --dry-run,MCP 用 dryRun: true)。节选默认值如下:

选项 默认值 说明
--name dsh-web 服务名
--profile web 托管的 dsh profile
--port 3080 监听端口
--dsh-home $DSH_HOME → ~/.dsh harness 主目录
--account LocalSystem 服务账户
--log <用户目录>\<服务名>.log stdout/stderr 合并,10 MB 轮转

完整选项表见 GitHub README。

工作原理(安装时在做什么)

安装服务本质是把五件事写对(README 归纳):

  1. 进程命令:例如 node.exe ...\dsh\lib\bin.js web --no-open --port 3080
  2. 环境变量:LocalSystem 下必须显式设置 DSH_HOME、USERPROFILE、APPDATA 等,否则 dsh 会去系统 profile 目录找配置。
  3. 工作目录:必须是真实存在的目录。
  4. 日志:合并 stdout/stderr,开启轮转,避免日志无限增长。
  5. 退出策略:崩溃后延迟重启、停止时给予优雅退出窗口。

更细的架构说明见仓库 docs/architecture.md。

适用场景与注意

适合:在 Windows 上长期运行 dsh web,需要开机自启、无控制台黑窗、用户注销后仍监听;愿意自行准备 nssm 或 WinSW,并接受安装服务时的管理员权限。

安全:--host 0.0.0.0 会把 Web UI 暴露到局域网;dsh 对 Web UI 有基于 token 的浏览器会话鉴权,若环境中有绕过鉴权的改动,任何能访问该端口的设备风险会放大——启用前需自行评估。

生态说明:DeepSeek Harness 社区插件目录(如 SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系;安装第三方插件前建议阅读源码与 LICENSE,确认与当前 dsh 版本匹配。

链接

  • 目录页:https://www.skillhub.cn/plugins/zheyuanlinye7/dsh-web-service
  • GitHub:https://github.com/zheyuanlinye7/dsh-web-service

经过上面的步骤,你可以在 Windows 上把 dsh web 从「开着窗口才活着」的前台进程,变成 SCM 托管的后台服务,并用同一套 CLI / MCP 做状态查看、预演安装与故障诊断。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜