69801ecc3f
Single-file Windows frpc service wrapper. Features: - Embeds frpc v0.70.1 (16.7MB) into one 18.9MB EXE - Registers as Windows Service (auto-start, no login required) - Auto-detects frpc config by three-tier search: 1. frpc.ini 2. frpc.toml 3. any *.ini/*.toml in exe dir - Self-healing supervisor: frpc crashes are restarted with exponential backoff (2s..60s), capped to avoid log spam - Console subsystem so install/start show feedback - FreeConsole on SCM start to suppress console window - Logs to <exe-dir>/logs/service.log Subcommands: install start stop remove import -d Smoke test (smoke_linux.go) covers all config detection paths including the custom-name (e.g. frpc-mike.ini) use case.
4.3 KiB
4.3 KiB
frpc-client-win
单文件 Windows 后台 frpc 服务包装程序。Go 编写,frpc.exe 嵌入进二进制,部署只需一个 EXE。
特性
- 单文件部署:frpc.exe 通过
embed.FS嵌入主程序,最终产物一个文件即可 - Windows Service:注册为系统服务,开机自启,无需登录用户
- 配置兼容:同时支持
frpc.ini(旧版) 和frpc.toml(新版) 两种配置格式,优先 .ini - 交互式导入:启动时若无配置文件,可在交互会话里
frpc-client.exe import拖入客户提供的 ini/toml - 服务管理子命令:
install / start / stop / remove+import+-d控制台前台 - 完整日志:本服务日志写
logs/service.log,frpc 输出统一进logs/frpc.log(实际是 service.log),便于集中取证 - Windows 事件日志:同时写 Windows Event Log(source=
frpc-client)
编译
GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -H windowsgui" -o frpc-client.exe .
-H windowsgui:编译为 GUI subsystem,服务运行时无控制台窗口-s -w:去除调试信息,减小体积- 当前内嵌 frpc v0.70.1,最终产物约 18.9 MB(frpc.exe 16.7MB + Go runtime 2.1MB + 业务代码)
- 若只想验证 Go 业务逻辑不实际打包 frpc,可用空文件占位
assets/frpc.exe(代码会正确处理缺失并报错)
内嵌的 frpc 版本
默认内嵌 v0.70.1(frp 最新稳定版)。如需升级:
- 从 https://github.com/fatedier/frp/releases 下载对应
frp_X.Y.Z_windows_amd64.zip - 解压,取出
frpc.exe - 替换
assets/frpc.exe,重新编译
用法
1. 安装并启动服务
以管理员 CMD 运行:
frpc-client.exe install
frpc-client.exe start
服务名:frpc-client,显示名:FRPC Client Service,启动类型:自动。
2. 导入配置文件
将客户提供的 frpc.ini 放到 EXE 同目录即可,服务启动时会自动检测。
若无 ini,可在控制台运行:
frpc-client.exe import
按提示拖入配置文件路径回车即可。脚本会自动按扩展名分发到 frpc.ini 或 frpc.toml。
3. 控制台前台运行(调试用)
frpc-client.exe -d
或 frpc-client.exe console,Ctrl+C 退出。日志同时输出到控制台和 logs/service.log。
4. 卸载服务
frpc-client.exe stop
frpc-client.exe remove
目录结构
frpc-client.exe # 本程序(已嵌入 frpc.exe)
frpc.ini # frpc 配置(优先)/ frpc.toml (备选)
logs/
service.log # 本服务日志 + frpc 输出(混合)
服务运行后,logs/service.log 会混合记录 frpc 子进程的所有输出 + 本服务的状态日志。
设计概览
┌─────────────────────────────────────────────────────────────┐
│ Windows SCM │
│ │ Start/Stop/Control │
│ ▼ │
│ Run() -> svc.Run("frpc-client", &handler{cfg}) │
│ │ │
│ ▼ │
│ handler.Execute() -> supervisor.Start() -> exec frpc.exe │
└─────────────────────────────────────────────────────────────┘
main.go入口,根据子命令分派internal/config:frpc.exe/ini 路径与释放逻辑internal/logger:简易文件日志器internal/service:svc.Handler 实现 + frpc 子进程 supervisor + 服务安装/卸载/启停
验证状态
| 检查项 | 状态 | 备注 |
|---|---|---|
| Windows vet | ✔ | GOOS=windows GOARCH=amd64 go vet ./... 干净 |
| Windows 编译 | ✔ | 18.9 MB, GUI EXE |
| embed 验证 | ✔ | strings frpc-client.exe 含 fatedier/frp |
| Linux smoke | ✔ | config 包行为正确(frpc 释放/ini 检测/优先级) |
Windows 服务真实运行测试需要 Windows 环境或 wine,本机未做。建议你在 Windows 上跑一遍
install→start→ 看logs/service.log+ Event Viewer。