文章待人工审核
🪟 Windows 服务黑窗口之谜——NSSM + .cmd 关不掉的控制台
🪟 Windows 服务黑窗口之谜——NSSM + .cmd = 关不掉的控制台 NSSM 做 Windows 服务很好用。除非——你的脚本会弹出一个关不掉的黑控制台窗口。 症状 用 NSSM 把一个 .cmd / .bat 脚本注册成服务后,任务栏或者桌面上会出现一个黑色控制台窗口。手动关掉它,服务就跟着断了…

🪟 Windows 服务黑窗口之谜——NSSM + .cmd = 关不掉的控制台
NSSM 做 Windows 服务很好用。除非——你的脚本会弹出一个关不掉的黑控制台窗口。
症状
用 NSSM 把一个 .cmd / .bat 脚本注册成服务后,任务栏或者桌面上会出现一个黑色控制台窗口。手动关掉它,服务就跟着断了;不关,它就一直杵在那里,远程桌面上看着尤其难受。
原因
.cmd 脚本本质上需要一个 cmd.exe 宿主进程。NSSM 以服务身份启动它时,会话配置不当(尤其是勾选了"允许服务与桌面交互"或者安装参数用了 install 而非 svc 路径),控制台就会被分配到可见的桌面站,而不是服务专属的隐藏桌面(Session 0)。
解决办法
- 别直接跑 .cmd:让 NSSM 启动真正的可执行文件(
node.exe、python.exe),把脚本作为参数传入。 - 用 wscript 包一层:一个两行的
.vbs以窗口模式0(隐藏)拉起脚本。 - 检查 NSSM 应用标签页:确认没有勾选 Allow Service to interact with desktop,服务应以
svc模式运行而不是console模式。 - 验证:重启服务后确认进程还在、但没有可见窗口:
sc query <服务名>+ 任务管理器看进程。
一句话总结
黑窗口的根源是"控制台程序被放到了交互式桌面"。让它跑在正确的会话里,或者干脆绕开 cmd.exe——服务就该是无影的。