Windows注册服务
一、使用 SC 命令管理 Windows 服务
SC.exe 是一个强大的命令行工具,用于与 Windows 服务控制管理器通信,可以创建、配置、启动、停止和删除系统服务。
1.1 基础语法
SC 命令的基本语法如下:
1 | SC [\\Servername] command Servicename [Optionname= Optionvalues] |
- Servername:远程计算机名(如
\\192.168.1.100),本地操作可省略。 - Command:要执行的操作命令。
- Servicename:服务的键名(注册表中的名称),不同于显示名称。
- Optionname= Optionvalues:选项名和值。注意:等号后面必须有一个空格。
1.2 常用命令速览
| 命令 | 功能描述 |
|---|---|
create |
创建服务(添加到注册表) |
delete |
删除服务 |
start |
启动服务 |
stop |
停止服务 |
config |
更改服务配置(永久生效) |
query |
查询服务状态 |
qc |
查询服务配置信息 |
1.3 核心操作示例
1. 创建服务
将可执行程序注册为自动启动的服务。
1 | sc create ServiceName binPath= "C:\Path\To\YourProgram.exe" start= auto |
示例:将 Tomcat 注册为服务
1 | sc create Tomcat binPath= "F:\apache-tomcat\bin\startup.bat" start= auto |
2. 删除服务
1 | sc delete ServiceName |
示例:删除 Tomcat 服务
1 | sc delete Tomcat |
3. 配置与查询服务
- 更改服务启动类型(如启用 Telnet):
1
2sc config tlntsvr start= auto
net start tlntsvr - 查询服务状态:
1
sc query ServiceName
- 查询服务详细配置:
1
sc qc ServiceName
1.4 SC CREATE 命令详解
创建服务时可以指定更多参数,格式如下:
1 | sc create Servicename [type= {own|share}] [start= {boot|system|auto|demand|disabled}] [binPath= <二进制路径>] [obj= <账户名>] [Displayname= <显示名称>] [depend= <依赖服务>] |
关键参数说明:
type=:服务类型。own为独立进程,share为共享进程(默认)。start=:启动类型。auto为自动,demand为手动(默认),disabled为禁用。binPath=:(必需) 可执行文件的完整路径。obj=:运行服务的账户,默认为LocalSystem。Displayname=:在服务管理器中显示的名称。depend=:该服务所依赖的其他服务(用空格分隔)。
复杂创建示例:
1 | sc create MyService binPath= "C:\MyApp\app.exe --config config.xml" type= own start= auto Displayname= "我的后台服务" depend= RPCSS/Tcpip |
二、使用 NSSM 封装任意程序为服务
对于非原生服务程序(如普通 .exe 控制台程序),可以使用 NSSM (Non-Sucking Service Manager) 将其封装为标准的 Windows 服务。它比微软自带的 srvany 更强大易用。
2.1 NSSM 的优势
- 支持任何
.exe程序。 - 安装和修改配置非常简单(有图形界面)。
- 可重定向程序输出到日志文件(支持日志轮换)。
- 具备服务守护功能,程序崩溃后可自动重启。
- 可自定义环境变量。
2.2 基本使用流程
1. 服务安装
打开命令行,执行:
1 | nssm install <ServiceName> |
这会弹出一个图形化配置窗口。在 “Application” 标签页中,设置:
- Path:选择你的可执行程序。
- Startup directory:设置程序的工作目录。
- Arguments:如有需要,填入启动参数。

配置完成后,点击 “Install service”。
命令行静默安装示例(安装 Jenkins Agent):
1 | nssm install Jenkins "%PROGRAMFILES%\Java\jre7\bin\java.exe" |
2. 服务管理
- 启动服务:
nssm start <ServiceName> - 停止服务:
nssm stop <ServiceName> - 重启服务:
nssm restart <ServiceName>
3. 修改配置
1 | nssm edit <ServiceName> |
再次打开图形界面修改参数。
4. 删除服务
1 | nssm remove <ServiceName> |
三、其他服务管理方式
3.1 使用 Regsvr32 注册控件
Regsvr32 用于注册 .dll、.ocx 等控件文件。
1 | Regsvr32 [/s] [/u] DLLName |
/s:静默注册,不显示成功对话框。/u:卸载控件。
3.2 通过注册表手动删除服务
如果 sc delete 失败,可以手动删除:
- 按
Win + R,输入regedit打开注册表编辑器。 - 导航至:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services - 找到与服务名对应的键值,右键删除即可。
四、总结与最佳实践
| 场景 | 推荐工具 | 关键命令/操作 |
|---|---|---|
| 管理原生/已知服务 | SC 命令 | sc start/stop/config/query |
| 将自定义程序安装为服务 | SC 命令 | sc create ... binPath= ... |
| 封装复杂程序(需日志、守护) | NSSM | nssm install (图形界面配置) |
| 注册/卸载系统控件 | Regsvr32 | Regsvr32 MyControl.dll |
重要提醒:
- 使用
sc create时,binPath=、start=等参数中的等号后必须有一个空格。 - 如果路径或服务名包含空格,必须使用双引号包裹。
- 大多数服务操作需要管理员权限。
- 修改服务配置后,有时需要重启服务或计算机才能生效。
通过熟练掌握 SC 命令和 NSSM 工具,你可以高效地在 Windows 环境下完成各种服务的部署、管理和维护工作。