sing-box Windows 怎么安装和运行?服务、配置文件与日志查看步骤
简答:先下载当前版本的 Windows 构建包,准备 config.json,用 sing-box check 校验后再执行 sing-box run。确认本地监听端口可用、运行窗口无 FATAL 日志后,再用 WinSW 注册后台服务;日志要分清 sing-box 自身日志和 WinSW 包装器日志。以下步骤按 2026 年 11 月 11 日可查资料整理,具体字段以当前版本文档为准。
定义:sing-box Windows 裸核运行,是直接使用 sing-box.exe 读取 JSON 配置并启动入站、出站和路由,不依赖图形客户端;WinSW 只是把这个进程包装成 Windows 服务。
先试这条最短路径:下载、校验、运行与成功判据
本文是中立的使用指南,不是 sing-box 项目的官方页面。sing-box 配置使用 JSON,官方配置文档列出了 log、inbounds、outbounds 和 route 等顶层字段;安装包和版本应从 sing-box Releases 按当前页面选择,检查日期为 2026 年 11 月 11 日。
- 在 Releases 页面选择 Windows 构建包。Windows 的官方构建涉及 amd64 和 arm64 等架构;不要把 amd64v3 简单等同于“只要支持 AVX2 就能运行”,具体资产名称和兼容性以对应版本页面为准。
- 把压缩包解压到一个固定目录,例如
C:\sing-box。将配置文件命名为config.json,放在同一目录,便于命令和服务引用。 - 打开 PowerShell,进入目录:
cd C:\sing-box。 - 先校验配置:
.\sing-box.exe check -c .\config.json。官方配置文档提供了sing-box check检查命令,具体参数形式应以当前版本帮助信息为准。 - 校验没有报错后运行:
.\sing-box.exe run -c .\config.json。
成功判据:校验阶段没有出现 FATAL 或配置解析错误;运行阶段进程保持运行;如果配置包含本地监听端口,可在另一个 PowerShell 执行 Test-NetConnection 127.0.0.1 -Port 2080,看到端口连通后再测试代理请求。端口号只是本文示例,必须与配置中的 listen_port 一致。
| 现象 | 判断 | 下一步 |
|---|---|---|
check 直接报 JSON 或字段错误 | 配置未通过基础检查 | 先按报错定位字段,不要注册服务 |
| 运行后立即退出 | 可能是权限、端口或初始化错误 | 保留控制台输出,查看 sing-box 日志 |
| 进程运行但端口不通 | 监听地址、端口或配置未按预期加载 | 核对 inbounds 和实际启动参数 |
| 端口可用但外部请求失败 | 本地入站已启动,不代表远程出站可用 | 检查出站、路由和上游网络 |
本文示例只用于验证本地核心和监听端口:mixed 入站接收本机代理请求,direct 出站直接连接目标地址。它不是远程服务器出站,也不会凭空提供代理线路。
配置文件怎么写:先用最小配置验证核心
官方文档说明 sing-box 使用 JSON 配置,并提供 check 和 format 命令。下面是一个仅用于本地验证的最小示例;其中没有远程节点、订阅或 TUN,不适合直接当作完整网络方案。
{"log":{"level":"info","output":"logs\\sing-box.log","timestamp":true},"inbounds":[{"type":"mixed","tag":"mixed-in","listen":"127.0.0.1","listen_port":2080}],"outbounds":[{"type":"direct","tag":"direct-out"}],"route":{"final":"direct-out"}}
mixed 属于可同时处理 HTTP 和 SOCKS 的入站类型,入站字段和监听字段以 官方 Inbound 文档为准。direct 出站的含义是直接发送请求,官方说明见 Direct Outbound 文档。
- log.level:可使用
trace、debug、info、warn、error等级别,排查时可临时提高日志级别,但不建议长期使用过于详细的日志。 - log.output:设置后,sing-box 日志写入指定文件,不再继续写到控制台;相对路径通常应以当前工作目录为基准,因此服务运行时建议使用明确的工作目录和稳定路径。
- inbounds:决定本机从哪里接收请求。示例只监听
127.0.0.1,仅供本机使用,不是局域网共享监听。 - outbounds:决定请求如何发出。示例只有
direct,因此不能证明远程节点、WireGuard 或其他协议已经可用。 - route.final:指定没有更具体规则时使用的最终出站。标签必须与
outbounds中的标签一致。
保存后可先执行 .\sing-box.exe format -w -c .\config.json 整理格式,再重新运行 check。如果当前版本对参数形式有差异,执行 .\sing-box.exe help 或查看对应版本文档,不要照抄旧版本命令。
前台运行正常后,再注册为 Windows 服务
建议先以前台方式运行并确认端口和日志正常,再做服务化。WinSW 的官方 v3 文档要求 XML 根元素为 service,并支持 executable、arguments、workingdirectory 和日志相关元素,参考 WinSW XML 配置文档。
- 准备与 WinSW 可执行文件同目录的文件,例如
sing-box-service.exe、sing-box-service.xml、sing-box.exe和config.json。WinSW 要求配置文件名和包装器文件名能够对应,具体命名规则见其命令文档。 - 将下面配置保存为
sing-box-service.xml。logpath的大小写和元素名称必须按当前 WinSW v3 文档核对,不要混用其他服务包装器的写法。
<service><id>sing-box-service</id><name>sing-box service</name><description>Run sing-box with a local configuration</description><executable>%BASE%\sing-box.exe</executable><arguments>run -c "%BASE%\config.json"</arguments><workingdirectory>%BASE%</workingdirectory><logpath>%BASE%\winsw-log</logpath><log mode="roll" /></service>
- 以管理员身份打开 PowerShell,进入该目录,执行
.\sing-box-service.exe install,然后执行.\sing-box-service.exe start。 - 查看状态:
.\sing-box-service.exe status。WinSW 官方命令文档还提供stop、restart、uninstall和refresh,可参考 WinSW CLI 命令文档。 - 修改配置后先停止服务,再以前台方式执行
check;确认无误后重新启动服务。若只修改 XML,可按当前 WinSW 版本支持情况使用refresh,不确定时采用 stop、修改、start 的回滚路径。
服务成功判据:WinSW status 显示服务正在运行;Windows 服务进程没有立即退出;sing-box 日志没有持续出现初始化错误;本地监听端口可被 Test-NetConnection 检测到。服务运行不等于远程线路可用,后者还取决于出站配置和网络环境。
回滚:先执行 .\sing-box-service.exe stop,再恢复上一份 config.json。如果不再需要服务,可执行 .\sing-box-service.exe uninstall;不要直接删除仍在运行的包装器文件。
日志怎么看:分开处理 sing-box 日志与 WinSW 日志
这是排查中最容易混淆的部分。sing-box 自身的 log.output 控制核心日志输出位置和等级;官方说明见 sing-box Log 配置文档。WinSW 的日志则用于捕获被包装进程的标准输出和标准错误,目录与滚动方式由 WinSW 配置决定,详细说明见 WinSW 日志与错误报告文档。
| 日志位置 | 主要用途 | 优先检查内容 |
|---|---|---|
log.output 指定的文件 | 查看 sing-box 核心运行状态 | 配置解析、入站创建、出站初始化、连接错误 |
WinSW logpath 目录 | 查看服务包装器和标准输出/错误 | 可执行文件路径、工作目录、服务启动和退出 |
| 前台 PowerShell 窗口 | 首次验证配置和实时观察 | 启动后是否立即退出、端口是否监听 |
推荐按“配置校验→前台运行→服务状态→两类日志”的顺序检查:
- 看到
decode config、unknown field或 JSON 语法错误时,回到配置文件,检查逗号、引号、字段名和标签引用。 - 看到端口占用、监听失败或无法绑定时,执行
Get-NetTCPConnection -LocalPort 2080 -ErrorAction SilentlyContinue,并确认没有其他程序占用同一端口。 - 看到服务启动后立即停止时,先执行 WinSW 的
status,再查看 WinSW 日志和 sing-box 的log.output文件;不要只看 Windows 服务列表中的“已停止”。 - 看到本地端口可用但请求失败时,说明至少监听链路可能已经建立,继续核对出站类型、路由最终标签和上游网络;不要把
direct示例误判成已经连接远程节点。
如果配置中的 log.output 使用相对路径,服务和手动运行的当前目录可能不同。本文示例通过 workingdirectory 固定工作目录;仍无法确认时,可临时改用绝对路径,并在确认问题后恢复为更易迁移的目录结构。
安装与运行速查卡
- 安装:从当前 Releases 页面选择 Windows 构建包,版本、架构和哈希以该页面为准。
- 目录:
sing-box.exe、config.json和日志目录放在固定路径,服务 XML 中使用稳定的工作目录。 - 校验:
.\sing-box.exe check -c .\config.json;参数如有变化,以当前版本帮助信息为准。 - 前台运行:
.\sing-box.exe run -c .\config.json。 - 服务注册:使用 WinSW 的
install、start、status,不要跳过前台验证。 - 日志:核心日志看
log.output,包装器和标准输出/错误看 WinSW 的logpath。 - 不要安装或继续使用的情况:下载来源、文件完整性、配置内容或可执行文件身份无法确认时,先停止操作,不要绕过系统安全提示。
以上路径只覆盖 Windows 上的 sing-box 裸核运行和 WinSW 服务托管,不包含订阅转换、具体远程节点、TUN 配置或多个客户端的混合排查。
常见问题
sing-box Windows 下载 amd64、amd64v3 还是 arm64?
不要只按“Intel 或 AMD”判断,也不要把 amd64v3 简化为 AVX2 兼容标志。先查看 Windows 当前系统类型,再对照对应版本 Releases 页面提供的资产;无法确认时选择当前页面明确标注、且与系统架构一致的构建包。具体版本和资产名称以发布页为准。
sing-box 的 check 命令能不能代替实际运行测试?
不能完全代替。check 主要用于发现配置解析和部分初始化问题;即使校验通过,运行时仍可能遇到端口占用、权限、网络或远程出站问题。因此应按 check、前台 run、端口测试、服务状态的顺序验证。
WinSW 日志和 sing-box 日志有什么区别?
sing-box 的 log.output 是核心自己的日志文件;WinSW 的 logpath 主要用于包装器及被包装进程标准输出和错误输出。服务启动失败时应先看 WinSW 日志确认进程是否被正确启动,再看 sing-box 日志确认配置和网络初始化。
为什么最小配置能启动,却不能证明远程代理可用?
因为示例使用的是 direct 出站,它表示直接连接目标地址,并没有配置远程服务器。这个示例只验证 JSON、核心进程和本地 mixed 监听是否正常;要使用远程线路,必须另外准备与当前版本匹配的出站配置,并按其官方字段文档核对。
修改 config.json 后,Windows 服务为什么没有立即变化?
服务进程通常会继续使用已经加载的配置。建议先执行 WinSW stop,备份并修改配置,手动运行 check,确认无误后再执行 WinSW start;如果只修改了服务 XML,再根据当前 WinSW 版本文档决定使用 refresh 或重新安装。
相关阅读
- 继续看 sing-box 启动失败的配置、端口与权限排查
- 如果核心能启动但域名解析异常,查看 sing-box DNS 配置步骤
- 需要把订阅内容整理成 sing-box 配置时,查看导入与格式排查
- 更多 Windows 客户端连接问题排查