Windows 下将 Claude Code Router 部署为系统服务

在 Windows 上运行 CLI 工具通常需要一直开着终端窗口,既不美观也不稳定。
本文介绍如何在 Windows Server 或 Windows 10/11 上,使用 Winget 快速配置环境,并利用 NSSM (Non-Sucking Service Manager) 将 Claude Code Router 封装为系统服务。

准备工作

  • 网络环境:需确保能访问 Claude API 服务器(api.anthropic.com)。
  • API 准备:获取 Anthropic Claude API Key。
  • 权限要求:需要管理员权限来安装软件和创建系统服务。

1. 环境安装 (Winget)

我们使用 Windows 自带的包管理器 winget 来快速安装所需软件:NSSM (用于管理服务) 和 Node.js

打开 PowerShell (管理员) 执行:

1
2
3
4
5
# 安装服务管理工具 NSSM
winget install NSSM.NSSM --source winget

# 安装 Node.js (确保版本符合 claude-code-router 要求)
winget install --id=OpenJS.NodeJS -e --silent --source winget

安装完成后,验证环境:

1
2
3
4
5
# 验证 Node.js 版本
node -v

# 验证 NSSM 是否可用
nssm version

2. 安装 Claude Code Router

环境就绪后,通过 npm 全局安装 claude-code-router:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
npm install -g @musistudio/claude-code-router

# 验证安装
ccr -v

Usage: ccr [command] [preset-name]

Commands:
start Start server
stop Stop server
restart Restart server
status Show server status
statusline Integrated statusline
code Execute claude command
model Interactive model selection and configuration
preset Manage presets (export, install, list, delete)
install Install preset from GitHub marketplace
activate Output environment variables for shell integration
ui Open the web UI in browser
-v, version Show version information
-h, help Show help information

Presets:
Any preset directory in ~/.claude-code-router/presets/

Examples:
ccr start
ccr code "Write a Hello World"
ccr my-preset "Write a Hello World" # Use preset configuration
ccr model
ccr preset export my-config # Export current config as preset
ccr preset install /path/to/preset # Install a preset from directory
ccr preset list # List all presets
ccr install my-preset # Install preset from marketplace
eval "$(ccr activate)" # Set environment variables globally
ccr ui

3. 配置文件

Claude Code Router 需要配置 API 密钥和其他参数。通常可以通过环境变量或配置文件来设置。

3.1 环境变量配置

创建一个批处理文件来设置环境变量并启动服务。在用户目录下创建配置文件:

1
2
# 创建配置目录
New-Item -ItemType Directory -Path "$env:USERPROFILE\.claude-code-router" -Force

3.2 配置示例

创建 $env:USERPROFILE\.claude-code-router\config.json 文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
{
"GEMINI_API_KEY": "${GEMINI_API_KEY}",
"VOLCENGINE_API_KEY": "${VOLCENGINE_API_KEY}",
"DASHSCOPE_API_KEY": "${DASHSCOPE_API_KEY}",
"LOG": true,
"LOG_LEVEL": "debug",
"CLAUDE_PATH": "",
"HOST": "0.0.0.0",
"PORT": 3456,
"APIKEY": "",
"API_TIMEOUT_MS": "600000",
"PROXY_URL": "http://127.0.0.1:7897",
"transformers": [],
"Providers": [
{
"name": "gemini",
"api_base_url": "https://generativelanguage.googleapis.com/v1beta/models/",
"api_key": "${GEMINI_API_KEY}",
"models": [
"gemini-2.5-flash",
"gemini-2.5-pro",
"gemini-3-flash-preview",
"gemini-3-pro-preview"
],
"transformer": {
"use": [
"gemini"
]
}
},
{
"name": "volcengine",
"api_base_url": "https://ark.cn-beijing.volces.com/api/v3/chat/completions",
"api_key": "${VOLCENGINE_API_KEY}",
"models": [
"doubao-seed-1-8-251228",
"doubao-seed-1-6-251015",
"doubao-seed-1-6-flash-250828"
],
"transformer": {
"use": [
"doubao"
]
}
},
{
"name": "dashscope",
"api_base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
"api_key": "${DASHSCOPE_API_KEY}",
"models": [
"qwen3-coder-plus",
"qwen3-tts-vc-2026-01-22",
"qwen3-omni-flash-2025-12-01",
"wan2.6-r2v-flash",
"wan2.6-image",
"qwen-vl-max",
"qwen3-max",
"qwen3-max-preview",
"kimi-k2.5",
"qwen-long-2025-01-25",
"qwen3-max-2026-01-23",
"MiniMax-M2.1",
"qwen3-vl-flash-2026-01-22",
"glm-4.7",
"deepseek-v3.2",
"qwen-vl-ocr-2025-11-20"
],
"transformer": {
"use": [
[
"maxtoken",
{
"max_tokens": 65536
}
],
"enhancetool"
]
}
}
],
"StatusLine": {
"enabled": false,
"currentStyle": "default",
"default": {
"modules": []
},
"powerline": {
"modules": []
}
},
"Router": {
"default": "dashscope,qwen3-max",
"background": "volcengine,doubao-seed-1-8-251228",
"think": "dashscope,qwen3-max-preview",
"longContext": "dashscope,qwen-long-2025-01-25",
"longContextThreshold": 60000,
"webSearch": "dashscope,qwen3-max",
"image": "dashscope,wan2.6-image"
},
"CUSTOM_ROUTER_PATH": ""
}

Claude Code Router 支持环境变量插值以实现安全 API 密钥管理。
您可以使用 $VAR_NAME${VAR_NAME} 语法在 config.json 中引用环境变量。

设置环境变量(可选,也可以直接在配置文件中写入):

1
2
3
4
5
setx ANTHROPIC_BASE_URL "http://127.0.0.1:3456"
setx ANTHROPIC_API_KEY "any-sk-you-set"
setx GEMINI_API_KEY "your-gemini-api-key"
setx VOLCENGINE_API_KEY "your-volcengine-api-key"
setx DASHSCOPE_API_KEY "your-dashscope-api-key"

4. 首次运行测试

先在命令行手动运行,确保配置正确:

1
ccr start

5. 配置 Windows 服务 (核心步骤)

现在我们将 Claude Code Router 配置为 Windows 服务。

5.1 创建服务

使用 NSSM 创建服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 获取 ccr 命令路径
$ccrHome = "$env:APPDATA\npm\ccr.cmd"
nssm install ccr "$ccrHome"

# 设置工作目录
nssm set ccr AppDirectory "$env:USERPROFILE\.claude-code-router"
# 设置日志路径
nssm set ccr AppStdout "$env:USERPROFILE\.claude-code-router\out.log"
nssm set ccr AppStderr "$env:USERPROFILE\.claude-code-router\out.log"

# 设置自动启动
nssm set ccr Start SERVICE_AUTO_START

# 设置启动参数
nssm set ccr AppParameters "start"

5.2 启动服务与排错

尝试启动服务:

1
nssm start ccr

🚨 常见问题:配置加载失败

如果启动后日志报错:

1
2
ℹ️  No providers configured. Listening on 0.0.0.0 without authentication.
Loaded JSON config from: C:\WINDOWS\system32\config\systemprofile\.claude-code-router\config.json

解决方法:
修改服务的登录账户为你当前的用户。

1
2
# 打开 GUI 编辑界面
nssm edit ccr
  1. 切换到 Log on (登录) 选项卡。
  2. 选择 This account (此账户)。
  3. 输入你的 Windows 用户名和密码。
  4. 点击 Edit service 保存。

最后重启服务:

1
2
ccr stop
nssm restart ccr

现在,Claude Code Router 就会作为 Windows 服务在后台静默运行了。

常用管理命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 停止服务
nssm stop ccr

# 删除服务
nssm remove ccr

# 查看状态
Get-Service ccr

nssm status ccr
nssm dump ccr

# 查看实时日志
Get-Content "$env:USERPROFILE\.claude-code-router\out.log" -Wait -Tail 20 -Encoding utf8

# 重新加载配置(如果支持)
nssm restart ccr

安全注意事项

  1. API Key 保护:确保 API Key 不被泄露,不要在公共代码库中提交包含 API Key 的配置文件。
  2. 网络访问控制:如果不需要外部访问,建议将 host 设置为 127.0.0.1 而不是 0.0.0.0
  3. 防火墙配置:确保 Windows 防火墙允许 Claude Code Router 使用的端口。
  4. 定期更新:保持 Claude Code Router 和依赖包的更新,以获得最新的安全补丁。

通过以上步骤,您就可以在 Windows 系统上稳定地运行 Claude Code Router 服务,实现开机自启和无人值守运行。