前言
很多朋友在使用OpenCode服务时,都会遇到两个烦人的问题:
问题一:电脑闲置后微信断连
Windows默认会在一段时间不活动后进入睡眠模式,导致所有服务暂停运行。这时微信AI就会显示"已断开连接",需要手动激活电脑运行。
问题二:异常重启后服务不恢复
电脑蓝屏或意外重启后,OpenCode和微信桥接服务(WBO)不会自动恢复运行,还得手动操作一遍,非常麻烦。
今天这篇文章,我将分享如何将这两个服务从计划任务升级为Windows系统服务,一次性解决以上两个问题。文章中会特别标注实操过程中的踩坑点和避坑建议,帮你少走弯路。
一、系统架构说明
我们的部署架构包含两个核心服务:
OpenCode服务
AI核心引擎,提供智能对话和代码执行能力 监听地址:localhost:4096 作为基础服务,其他服务依赖于它
WBO桥接服务
微信消息桥接器,连接OpenCode和微信 依赖OpenCode服务,必须在其之后启动
两者的关系是:WBO服务 → 依赖 → OpenCode服务
二、使用WinSW部署系统服务
2.1 为什么选择WinSW?
WinSW(Windows Service Wrapper)是一个轻量级的开源工具,可以将任何可执行文件包装成Windows系统服务。相比计划任务,系统服务有以下优势:
启动更早:系统启动时就开始运行,无需等待用户登录 更稳定:支持崩溃自动恢复 原生依赖管理:可以设置服务间的依赖关系 专业管理:使用Windows服务管理器统一管理
2.2 文件结构
部署后的文件结构如下:
C:\Services\├── opencode.exe # OpenCode服务主程序├── opencode.xml # OpenCode服务配置├── wbo.exe # WBO服务主程序├── wbo.xml # WBO服务配置└── logs\ # 服务日志目录
2.3 OpenCode服务配置
配置文件 opencode.xml 的内容:
<service><id>OpenCode</id><name>OpenCode Service</name><description>OpenCode AI服务</description><executable>C:\Users\hd\AppData\Roaming\npm\opencode.cmd</executable><arguments>serve --hostname 0.0.0.0 --port 4096</arguments><workingdirectory>C:\Users\hd</workingdirectory><onfailureaction="restart"delay="10 sec"/><onfailureaction="restart"delay="20 sec"/><onfailureaction="none"/><resetfailure>1 hour</resetfailure><starttype>Automatic</starttype></service>
配置说明:
服务ID和名称:用于在服务管理器中识别 启动命令:直接调用npm安装的opencode.cmd包装器 失败恢复:失败后10秒、20秒自动重启,之后停止 启动类型:自动启动,系统启动时运行
2.4 WBO服务配置
配置文件 wbo.xml 的内容:
<service><id>WBO</id><name>WBO Bridge Service</name><description>WBO微信桥接服务</description><executable>C:\Users\hd\AppData\Roaming\npm\wbo.cmd</executable><arguments>--server-username your_username --server-password your_password --server-url http://localhost:4096</arguments><workingdirectory>C:\Users\hd</workingdirectory><depend>OpenCode</depend><onfailureaction="restart"delay="10 sec"/><onfailureaction="restart"delay="20 sec"/><onfailureaction="none"/><resetfailure>1 hour</resetfailure><starttype>Automatic</starttype></service>
关键配置:
depend标签:声明依赖OpenCode服务 启动参数:包含桥接服务的认证信息(请替换为你的实际配置) 账号密码设置为opencode服务的账号密码
2.5 安装服务
打开管理员权限的PowerShell,执行以下命令:
# 安装OpenCode服务& "C:\Services\opencode.exe" install# 安装WBO服务& "C:\Services\wbo.exe" install
安装成功后,可以在Windows服务管理器(services.msc)中看到这两个服务。
2.6 服务账户配置(重要)
默认情况下,Windows服务以 LocalSystem 账户运行。但 LocalSystem 的HOME目录是 C:\Windows\system32\config\systemprofile,与用户目录不同,导致OpenCode无法加载用户配置(插件、MCP等)。
问题现象:
服务能正常启动,但连接后显示初始化状态 没有加载已安装的插件和MCP服务器 错误日志显示尝试从 C:\Windows\system32\config\systemprofile\.config\opencode\加载配置
解决方案:将服务改为以用户身份运行
步骤1:授予用户"以服务身份登录"权限
# 获取用户SID$hdUser = Get-LocalUser -Name "你的用户名"$hdSID = $hdUser.SID.Value
# 创建安全策略文件
$infContent = @"[Unicode]Unicode=yes[Version]signature="`$CHICAGO`$"Revision=1[Privilege Rights]SeServiceLogonRight = *$hdSID"@$infPath = "$env:TEMP\secpolicy.inf"$infContent | Out-File -FilePath $infPath -Encoding Unicode
# 应用安全策略secedit /configure /db "$env:TEMP\secedit.sdb" /cfg $infPath /areas USER_RIGHTS# 清理临时文件Remove-Item $infPath -Force步骤2:修改服务登录账户# 修改OpenCode服务sc.exe config OpenCode obj= ".\你的用户名" password= "你的Windows登录密码"# 修改WBO服务sc.exe config WBO obj= ".\你的用户名" password= "
你的Windows登录密码"
步骤3:重启服务验证
Restart-Service -Name "OpenCode", "WBO" -ForceGet-Service -Name "OpenCode", "WBO"
验证成功标志:
服务状态显示为 Running连接后能看到已配置的插件和MCP服务器 不再显示初始化状态
注意事项:
Windows密码更改后,需要重新配置服务密码 如果权限授予失败,可通过 secpol.msc(本地安全策略)手动添加
三、解决睡眠断连问题
3.1 问题分析
Windows默认会在15-30分钟不活动后进入睡眠模式。睡眠时:
所有进程暂停运行 网络连接断开 微信检测到连接断开,显示"已断开"
3.2 解决方案
禁用睡眠功能,保留屏幕关闭设置:
# 禁用睡眠(接通电源时)powercfg /change standby-timeout-ac 0# 禁用睡眠(使用电池时)powercfg /change standby-timeout-dc 0# 禁用休眠(接通电源时)powercfg /change hibernate-timeout-ac 0# 禁用休眠(使用电池时)powercfg /change hibernate-timeout-dc 0
3.3 验证设置
执行以下命令查看当前设置:
powercfg /query SCHEME_CURRENT SUB_SLEEP如果看到"当前电源设置索引:0x00000000",表示已成功禁用。设置完成后:
睡眠:从不(接通电源/电池都禁用) 休眠:从不(接通电源/电池都禁用) 屏幕关闭:保留原有设置(可按需调整)
四、常用管理命令
4.1 服务状态查看
# 查看服务状态Get-Service -Name "OpenCode", "WBO"
4.2 服务启停操作
# 启动服务Start-Service -Name "OpenCode"Start-Service -Name "WBO"# 停止服务Stop-Service -Name "WBO"Stop-Service -Name "OpenCode"# 重启服务Restart-Service -Name "OpenCode"Restart-Service -Name "WBO"
4.3 服务卸载
# 卸载服务&"C:\Services\wbo.exe"uninstall&"C:\Services\opencode.exe"uninstall# 删除服务文件Remove-Item -Path "C:\Services" -Recurse -Force
五、故障恢复机制
系统服务配置了自动故障恢复:
第一次失败:10秒后自动重启 第二次失败:20秒后自动重启 第三次失败:停止重启,等待手动干预 1小时后:重置失败计数
日志文件位于 C:\Services\logs\ 目录,按大小滚动(10MB/文件,保留5个文件),方便排查问题。
六、方案对比
七、总结
通过将OpenCode和WBO部署为Windows系统服务,并禁用睡眠功能,我们可以:
实现开机自启动,无需手动干预 获得更稳定的运行环境 解决长时间不操作导致的断连问题 享受专业的故障恢复机制
这套方案已经稳定运行,希望对有同样需求的朋友有所帮助。
夜雨聆风