Windows 配置自动启动服务
文章目录
Windows 环境下 NGINX & 批处理服务自启动配置指南
本指南介绍如何使用开源工具 WinSW (Windows Service Wrapper) 将 Windows 版的 NGINX 以及自定义 .bat 脚本注册为系统原生服务,实现开机无需登录、后台静默自启动。
🛠️ 核心准备工具
- WinSW 可执行文件:GitHub Releases 下载地址
- 注:通常下载
WinSW-x64.exe即可。
- 注:通常下载
📝 场景一:将 NGINX 注册为系统服务
1. 文件放置
将下载好的 WinSW-x64.exe 复制到你的 NGINX 根目录(例如 C:\nginx),并重命名为:
nginx-service.exe
2. 创建配置文件
在同级目录下新建一个文本文件,命名为 nginx-service.xml(必须与 .exe 文件名完全一致),写入以下配置:
<service>
<id>nginx</id>
<name>NGINX Service</name>
<description>NGINX HTTP Server Reverse Proxy</description>
<logpath>C:\nginx\logs</logpath>
<log mode="roll"></log>
<executable>C:\nginx\nginx.exe</executable>
<startarguments></startarguments>
<stopexecutable>C:\nginx\nginx.exe</stopexecutable>
<stoparguments>-s stop</stoparguments>
<onfailure action="restart" delay="10sec"/>
</service>
⚠️ 注意:若 NGINX 安装在其他盘符或路径(如
D:\nginx),请将上面所有C:\nginx替换为实际的绝对路径。
📝 场景二:将 .bat 批处理脚本注册为系统服务
⚠️ 前提条件:如果脚本内部含有
PAUSE或set /p等人工交互命令,必须先修改脚本移除交互(例如改为timeout /t 3 /nobreak自动延迟),否则后台服务会永久卡死。
1. 文件放置
将 WinSW-x64.exe 复制到脚本所在目录(例如 D:\xiaomiqiu),并重命名为:
xiaomiqiu-service.exe
2. 创建配置文件
在同级目录下新建 xiaomiqiu-service.xml,写入以下配置:
<service>
<id>xiaomiqiu_bat</id>
<name>小米球穿透服务</name>
<description>后台自动调用 D 盘的小米球批处理脚本</description>
<executable>cmd.exe</executable>
<arguments>/c "D:\xiaomiqiu\小米球一键启动工具.bat"</arguments>
<workingdirectory>D:\xiaomiqiu</workingdirectory>
<logpath>D:\xiaomiqiu\logs</logpath>
<log mode="roll"></log>
<onfailure action="restart" delay="10sec"/>
</service>
💻 ⚖️ 服务管理命令(通用)
配置完成后,必须以 管理员身份 打开命令行(CMD 或 PowerShell),进入对应的程序目录执行以下命令:
| 功能 | 命令指令 |
|---|---|
| 进入目录 | cd /d C:\nginx 或 cd /d D:\xiaomiqiu |
| 安装服务 | .\nginx-service.exe install |
| 启动服务 | .\nginx-service.exe start |
| 重启服务 | .\nginx-service.exe restart |
| 停止服务 | .\nginx-service.exe stop |
| 卸载服务 | .\nginx-service.exe uninstall |
💡 提示:安装成功后,也可以按下
Win + R输入services.msc打开 Windows 运行服务列表,找到对应服务将"启动类型"修改为"自动"。
❌ 常见故障排查(FAQ)
1. 报错 flag provided but not defined: -p
- 原因:在新版 WinSW 的
<arguments>标签中误传了不支持的-p参数。 - 解决:检查 XML 文件,删掉
-p相关的参数定义,直接使用标准的绝对路径指定即可。
2. 服务启动了,但网页/穿透没有生效
- 原因 1:端口被占用(如 80 端口被 IIS 或本地其他软件占用)。
- 原因 2:未配置
<workingdirectory>,导致脚本找不到同级目录下的.exe核心程序。 - 解决:检查 WinSW 生成的
logs目录下的.err.log日志文件,查看具体报错。
文章作者 Brook
上次更新 2026-06-26