Deepseek-harness 开机自启动配置完整指南
适用环境:Windows 10 / 11,Node.js 18+,pnpm 8+,deepseek-harness 项目
目标:通过任务计划程序实现dsh web服务的开机自启动,并彻底解决0x1错误、乱码等问题。
目录
1. 背景与目标
- 项目:从 GitHub 克隆的
deepseek-harness(启动命令pnpm dsh web)。 - 需求:在 Windows 开机后自动运行该服务,以便通过
http://localhost:3080访问。 - 挑战:直接使用任务计划程序或批处理脚本时,遇到多个典型错误。
2. 遇到的问题汇总
| 错误现象 | 可能原因 |
|---|---|
任务计划程序运行结果为 0x1 |
环境变量缺失、命令路径错误、进程退出码非零 |
日志中出现乱码 不是内部或外部命令 |
.bat 文件编码为 UTF-8 with BOM |
系统找不到指定的路径 |
路径包含空格且未加引号 |
'k' 不是内部或外部命令 |
在任务计划中错误使用 cmd /k 参数 |
服务能启动(浏览器可访问)但任务仍报 0x1 |
主进程(pnpm)退出码非零,但子进程(node)仍在运行 |
3. 问题排查过程
3.1 直接运行 pnpm 命令
- 任务计划程序填写:程序
pnpm,参数dsh web,起始于项目路径。 - 结果:
0x1,服务未启动。
3.2 使用 .bat 脚本并记录日志
创建了 start_dsh_debug.bat 如下:
@echo off
chcp 65001 >nul
cd /d E:\XXXXXXXXXXXX
set PATH=D:\nodejs;%USERPROFILE%\AppData\Local\pnpm;%PATH%
echo %date% %time% - 开始启动 >> %USERPROFILE%\Desktop\dsh_startup_log.txt
pnpm dsh web >> %USERPROFILE%\Desktop\dsh_startup_log.txt 2>&1
echo %date% %time% - 退出代码: %errorlevel% >> %USERPROFILE%\Desktop\dsh_startup_log.txt
暴露的问题:
编码问题:记事本默认保存为 UTF-8 with BOM,导致 CMD 将第一行识别为乱码,从而报“不是内部或外部命令”。
路径空格:cd 命令未对包含空格的路径加引号,导致切换失败。
PATH 设置错误:D:\nodejs 并非真实安装目录,且拼接 ‘D:\nodejs、pnpm;’ 语法无效。
解决尝试:
将 .bat 另存为 ANSI 编码。
路径加双引号:cd /d “E:\XXXXXXXXXXX\deepseek-harness”。
使用 where node 和 where pnpm 获取真实路径。
3.3 使用 cmd /k 调试导致新错误
在任务计划中设置程序 cmd.exe,参数 /k “start_dsh_debug.bat”,结果出现 ‘k’ 不是内部或外部命令,因为任务计划程序将 /k 和后续参数拆分解析。
3.4 发现“服务能启动但任务仍报 0x1”
经过修正编码和路径后,脚本能成功启动服务(浏览器可访问),但任务计划程序仍然记录 0x1。原因是 pnpm dsh web 在执行过程中启动了 node 子进程后,pnpm 主进程可能返回非零退出码,而任务计划程序只关注主进程的退出码。
4. 最终解决方案
核心思想:让任务计划程序启动一个独立进程,并立即以 0x0 退出,不依赖 pnpm 的退出码。
实现方式:使用 powershell.exe 的 Start-Process 命令启动 pnpm dsh web,同时指定工作目录,并隐藏窗口,最后通过 exit 0 确保任务计划程序认为执行成功。
优势:
无需 .bat 脚本,避免编码问题。
完美支持带空格的路径(使用单引号)。
进程独立运行,不受任务计划程序生命周期影响。
可隐藏窗口,后台静默运行。
5. 操作步骤详解
5.1 确认 pnpm 的完整路径
打开 命令提示符(CMD)。
输入命令:
where pnpm
若找不到,请先全局安装:npm install -g pnpm
5.2 建议项目路径不含空格
如果您的项目路径包含空格(如 E:\XXXX XXXXX\deepseek-harness),建议重命名为无空格路径(如 E:\deepseek-harness)以避免解析问题。
(若不想改名,也可以,但需在命令中用单引号括起,我们提供的模板已支持。)
5.3 创建或修改任务计划程序
按 Win + R,输入 taskschd.msc 打开任务计划程序。
点击“创建任务”或右键已有任务选“属性”。
常规选项卡:
名称:如 DshWebAutoStart
勾选 “使用最高权限运行”
选择 “只在用户登录时运行”(若需不登录运行,可改选“不管用户是否登录”,但需输入密码,且可能无法访问图形界面)
触发器:新建“登录时”触发器。
操作:新建操作,设置如下:
程序或脚本:powershell.exe
添加参数(请根据您的实际情况选择一种)
- 方式一(推荐,pnpm 已在 PATH 中):
-NoProfile -ExecutionPolicy Bypass -Command "Start-Process -FilePath 'pnpm' -ArgumentList 'dsh web' -WorkingDirectory 'E:\XXXXXXXXXXXX' -WindowStyle Hidden; exit 0"
- 方式二(使用 pnpm 绝对路径):
-NoProfile -ExecutionPolicy Bypass -Command "Start-Process -FilePath 'C:\Users\你的用户名\AppData\Local\pnpm\pnpm.cmd' -ArgumentList 'dsh web' -WorkingDirectory 'E:\XXXXXXXXXXX' -WindowStyle Hidden; exit 0"
起始于(可选):留空(工作目录已在命令中指定)。
条件选项卡:可按需取消勾选“只有在计算机使用交流电源时才启动此任务”等。
点击“确定”保存。
5.4 测试任务
在任务计划程序中右键点击该任务,选择 “运行”。
等待 2~3 秒,查看 “上次运行结果” 是否变为 0x0(操作成功完成)。
打开浏览器访问 http://localhost:3080,确认服务已正常启动。
6. 常见问题及解决
- Q1:任务显示 0x0,但浏览器无法访问 localhost:3080
端口占用:在 -ArgumentList 中添加 --port 3081 更换端口,如 ‘dsh web --port 3081’,然后访问 localhost:3081。
服务启动失败:暂时去掉 -WindowStyle Hidden,让窗口弹出,观察实时错误信息。例如:
powershell
-NoProfile -ExecutionPolicy Bypass -Command “Start-Process -FilePath ‘pnpm’ -ArgumentList ‘dsh web’ -WorkingDirectory ‘E:\deepseek-harness’; exit 0”
依赖缺失:手动在项目目录运行 pnpm install 确保依赖完整。
- Q2:仍显示 0x1,且无进程启动
检查 pnpm 路径:再次用 where pnpm 确认路径是否正确。
检查工作目录:确保目录存在且包含 package.json。
手动测试:在普通 CMD 中进入项目目录,执行 pnpm dsh web,确认能成功运行。
添加调试日志:临时将命令改为直接运行并输出日志:
powershell
-NoProfile -ExecutionPolicy Bypass -Command “Set-Location ‘E:\deepseek-harness’; pnpm dsh web *>&1 | Out-File C:\dsh_debug.log; exit 0”
运行后查看 C:\dsh_debug.log 中的详细错误。
- Q3:权限不足
确保任务勾选 “使用最高权限运行”。
确保当前用户对项目文件夹有“修改”权限。
若项目在非系统盘(如 E 盘),检查该磁盘的权限设置,添加 SYSTEM 用户或当前用户的完全控制权限。
- Q4:如何取消开机自启
在任务计划程序中,禁用或删除该任务即可。
7. 命令模板速查
模板 1(pnpm 在 PATH 中)
powershell
-NoProfile -ExecutionPolicy Bypass -Command “Start-Process -FilePath ‘pnpm’ -ArgumentList ‘dsh web’ -WorkingDirectory ‘你的项目完整路径’ -WindowStyle Hidden; exit 0”
模板 2(使用 pnpm 绝对路径)
powershell
-NoProfile -ExecutionPolicy Bypass -Command “Start-Process -FilePath ‘C:\Users\你的用户名\AppData\Local\pnpm\pnpm.cmd’ -ArgumentList ‘dsh web’ -WorkingDirectory ‘你的项目完整路径’ -WindowStyle Hidden; exit 0”
模板 3(调试用,显示窗口)
powershell
-NoProfile -ExecutionPolicy Bypass -Command “Start-Process -FilePath ‘pnpm’ -ArgumentList ‘dsh web’ -WorkingDirectory ‘你的项目完整路径’; exit 0”
8. 总结
通过 PowerShell + Start-Process 方式,我们成功绕开了任务计划程序的环境变量限制和退出码问题,实现了 dsh web 服务的稳定开机自启动。该方案具有以下优点:
✅ 兼容包含空格或中文的路径(使用单引号)
✅ 无需 .bat 脚本,避免编码问题
✅ 任务计划程序返回 0x0,状态清晰
✅ 可隐藏窗口,后台静默运行
✅ 易于调试和扩展
如果严格按照本指南操作,您的 dsh web 服务将在每次登录后自动启动,且无任何弹窗干扰。
更多推荐

所有评论(0)