Windows 上 Hermes Gateway 怎么静默后台启动:企业微信、日志和 PID 排查指南
这篇文章复盘 Windows 原生环境里 Hermes Gateway 连接企业微信后,如何用计划任务和 wscript.exe 静默后台启动,并用 gateway.pid、gateway_state.json 和日志确认状态。
需要继续找相关内容?
如果你想继续查工具名、术语、对比页或相关问题,可以直接搜全站,不用回到博客列表页重找。
核心结论
Windows 原生运行 Hermes Gateway 时,可以用 Windows AI Gateway Silence Run 创建隐藏计划任务,让 hermes gateway run 在后台运行,并通过 gateway.pid、gateway_state.json 和日志确认企业微信连接状态。
适合谁看
适合在 Windows 10/11 上原生安装 Hermes,并用企业微信 WeCom 连接 Hermes Gateway 的用户。
关键判断
核心命令是 install、restart、status、logs、errors、follow;Hermes 不依赖固定 18789 端口,状态以 ~/.hermes/gateway.pid 和 gateway_state.json 为准。
下一步建议
先确认 hermes status 可用,再克隆仓库并运行 .\hermes-gateway install / restart / status。
你将学到
- + 为什么 Hermes 不能照搬 OpenClaw 的 18789 端口检测
- + Hermes Windows Silence Run 的隐藏启动方式
- + 企业微信 WeCom 连接状态应该看哪里
- + 怎么查看 Hermes Gateway 的 PID、日志和错误日志
- + 第一次切换后台时遇到 Access is denied 怎么处理
Windows 上原生跑 Hermes Gateway,最常见的尴尬不是“跑不起来”,而是“跑起来以后一直占着一个终端”。
如果你已经把 Hermes 接到了企业微信,执行:
hermes gateway run
它可以正常启动,但这个 PowerShell / CMD 窗口就得一直开着。关掉窗口,Gateway 也会跟着退出。
Windows AI Gateway Silence Run 里的 Hermes 脚本,就是为这个场景做的。
本次排查环境和证据边界
| 项目 | 现场记录 |
|---|---|
| 系统环境 | Windows 原生环境 |
| 接入通道 | 企业微信 WeCom |
| 核心问题 | Gateway 占前台窗口;窗口关闭后企业微信不再回复 |
| 主要证据 | gateway.pid、gateway_state.json、任务计划程序、Hermes 日志 |
| 不适用判断 | 不把固定端口监听当作唯一标准,因为 Hermes 不一定暴露本地固定端口 |
所以这篇不是泛泛介绍 Hermes,而是记录一个很具体的 Windows 现场:企业微信已经接通,但 Gateway 运行方式不稳定,需要把它变成可复盘、可重启、可看日志的后台服务。
为什么 Hermes 不能照搬 OpenClaw 的做法
OpenClaw Gateway 默认有 18789 监听端口,所以可以用端口判断:
Get-NetTCPConnection -LocalPort 18789 -State Listen
Hermes 不一样。尤其是只连接企业微信 WeCom WebSocket 时,本地不一定有一个固定监听端口。
所以 Hermes 的排查重点应该放在:
%USERPROFILE%\.hermes\gateway.pid
%USERPROFILE%\.hermes\gateway_state.json
%USERPROFILE%\.hermes\logs\agent.log
%USERPROFILE%\.hermes\logs\errors.log
也就是说,判断 Hermes 是否正常,不是看某个端口,而是看 PID、真实 Windows 进程、平台状态和日志。
Hermes 排障时先看这四层
| 层级 | 看什么 | 常见问题 |
|---|---|---|
| Gateway 进程 | gateway.pid 对应的 Windows 进程是否存在 | PID 文件还在,但进程已经退出 |
| 计划任务 | Hermes Gateway 任务是否存在、action 是否正确 | 任务创建了,但没有触发或被权限拦住 |
| 平台状态 | gateway_state.json 里的 WeCom 状态 | Gateway 在跑,但企业微信连接断开 |
| 日志 | agent.log 和 errors.log | token、网络、权限或依赖错误 |
企业微信发消息不回复时,先跑这一组最小复盘命令:
.\hermes-gateway status
Get-Content "$env:USERPROFILE\.hermes\gateway_state.json" -Raw
$pidPath = "$env:USERPROFILE\.hermes\gateway.pid"
if (Test-Path $pidPath) {
Get-Process -Id (Get-Content $pidPath) -ErrorAction SilentlyContinue
}
.\hermes-gateway errors
这几步能快速区分:是 Gateway 没跑、计划任务没生效、企业微信通道掉线,还是 Hermes 自己报错。
首次使用
先确认 Hermes 在当前 PowerShell 里可用:
hermes status
然后克隆工具仓库:
git clone https://github.com/kunpeng-ai-lab/windows-ai-gateway-silence-run.git
cd windows-ai-gateway-silence-run
安装隐藏计划任务:
.\hermes-gateway install
切到静默后台运行:
.\hermes-gateway restart
查看状态:
.\hermes-gateway status
正常情况下,你会看到类似:
Task name : Hermes Gateway
Task state : Ready
Runtime source : scheduled task
Gateway PID : 12345
Gateway state : running
Platforms:
wecom: connected
常用命令
查看状态:
.\hermes-gateway status
查看普通日志:
.\hermes-gateway logs
查看错误日志:
.\hermes-gateway errors
实时跟随日志:
.\hermes-gateway follow
停止后台 Gateway:
.\hermes-gateway stop
卸载计划任务:
.\hermes-gateway uninstall
它实际做了什么
脚本会创建一个 Windows 计划任务:
Hermes Gateway
计划任务执行:
C:\Windows\System32\wscript.exe
wscript.exe 再隐藏运行:
%USERPROFILE%\.hermes\start-gateway-hidden.ps1
真实 Gateway 命令仍然是:
hermes gateway run --replace --accept-hooks
隐藏启动器的外层日志在:
%USERPROFILE%\.hermes\logs\gateway-hidden-yyyy-MM-dd.log
Access is denied 怎么办
第一次从前台 hermes gateway run 切到静默后台时,如果旧进程是由更高权限的终端启动的,普通 PowerShell 可能无法停止它。
这时状态里可能显示:
Runtime source : external or foreground process
处理方式很简单:
- 手动关闭那个旧的 Hermes 前台终端;
- 回到工具目录;
- 再执行:
.\hermes-gateway restart
.\hermes-gateway status
之后就会由计划任务接管。
注意日志安全
企业微信和其他消息平台的报错日志里,可能出现 token、secret、webhook、cookie 或用户 ID。
公开求助前,至少先检查:
token
secret
app_secret
webhook
authorization
cookie
不要把完整 .env 或完整日志直接贴到公开平台。
和上游 PR 的关系
这类问题后来也整理成了给 Hermes 上游的 Windows best-effort 支持 PR。它关注的是同一条链路:Windows 原生环境里,Gateway 如何后台运行、如何写状态、如何在计划任务里尽量自动恢复。

这里也要讲清楚边界:这不是宣称 Hermes 已经把 Windows 原生环境做成完整官方支持平台,而是把我们真实遇到的企业微信 Gateway 场景,收敛成可审查的脚本、状态文件和恢复策略。对普通用户来说,最有价值的是这三点:
- 不再依赖一个必须常开的前台 PowerShell 窗口;
- 用
gateway.pid、gateway_state.json和日志判断真实状态; - 任务计划程序只做 best-effort 恢复,真正排障仍然要看日志和进程。
相关链接
继续延伸
要点总结
- - Hermes Gateway 没有固定本地监听端口,不能只靠 Get-NetTCPConnection 判断
- - 更可靠的状态来源是 ~/.hermes/gateway.pid、gateway_state.json 和 ~/.hermes/logs/
- - 隐藏启动器真实执行 hermes gateway run --replace --accept-hooks
- - 如果旧前台进程权限更高,第一次需要手动关闭旧终端一次
- - 公开日志前必须检查 token、secret、webhook、cookie 等敏感字段