sc query 是什么
sc 是与服务控制管理器通信的命令行工具,用来查询和控制 Windows 服务的状态。查询类用法最常用:给出服务短名,输出当前状态、进程编号与退出码;也可以按条件列举全部服务。它的输出字段固定,退出码字段能直接反映服务上一次启动或运行的结果,所以排查「服务起不来」时,先跑一次查询往往就能把范围缩小到具体原因。注意在 PowerShell 会话里 sc 是另一个命令的别名,必须写 sc.exe 才能调用系统程序。
基本信息
| 适用平台 | Windows(sc.exe 系统自带,全版本可用) |
|---|---|
| 语法 | sc query <服务名>;sc query type= service state= all;sc qc <服务名> |
| 参数格式 | 等号后面必须紧跟空格再写值,例如 type= service;写成等号紧贴值会报参数错误 |
| 服务名要求 | 使用短名(如 Spooler、wuauserv),不能用中文显示名 |
| 权限 | 查询普通用户即可;启动、停止、删除服务需要管理员 |
| PowerShell 注意 | 会话中的 sc 是别名,脚本里应写成 sc.exe |
典型使用场景
- 快速确认某个服务的当前状态与启动类型
- 在无图形界面的服务器上批量列出服务及其状态
- 读取退出码判断上一次启动为何失败
- 查看服务配置:可执行文件路径、启动账户、依赖关系
- 在批处理脚本里按状态做条件分支,决定是否启动服务
- 服务异常时先记录状态快照,再动手处理,便于事后对比
常用示例
常用示例
:: 查询单个服务的状态(使用短名)
sc query Spooler
:: 查询并查看配置:路径、账户、启动类型
sc qc Spooler
:: 列出所有服务及其状态
sc query type= service state= all
:: 只列正在运行的服务
sc query type= service state= running
:: 启动与停止(需管理员)
sc start Spooler
sc stop Spooler
:: PowerShell 中必须写全名
sc.exe query Spooler输出字段读法
| 字段 | 含义 | 异常判断 |
|---|---|---|
| SERVICE_NAME | 服务短名 | 与预期不符说明查错了目标 |
| DISPLAY_NAME | 本地化显示名 | 查询时不能用它代替短名 |
| STATE | 当前状态与附加状态 | STOPPED 与预期不符即定位到服务未起 |
| WIN32_EXIT_CODE | 上一次退出码 | 非零表示上次异常结束,需要结合日志分析 |
| SERVICE_EXIT_CODE | 服务自身定义的退出码 | 由程序自己写入,含义看厂商文档 |
| CHECKPOINT 与 WAIT_HINT | 启动或停止的进度提示 | 长时间停在同一数值常表示启动超时 |
参数里的等号写法容易踩坑:正确写法是 type= service,等号与值之间必须留空格;等号紧贴值会被当成未识别参数,报错信息还比较含糊。
在 PowerShell 里敲 sc 得到的是别的命令,输出与预期完全不同。脚本中统一写 sc.exe,可以避免因为会话环境不同而出现两种行为。