sc start 与 sc stop
这是脚本里启停服务的常用方式。要点在于它们是异步请求:命令返回只表示请求已被受理,并不代表服务已经启动或停止完成,会先进入正在启动或正在停止的中间状态,需要轮询状态查询才能确认最终结果。
基本信息
| 适用平台 | Windows CMD(cmd.exe) |
|---|---|
| 语法 | sc start 服务名;sc stop 服务名;sc query 服务名 |
| 异步特性 | start 与 stop 立即返回,状态先变为正在启动或正在停止 |
| 确认方式 | 轮询 sc query 的 STATE 字段直到目标状态 |
| 依赖关系 | sc enumdepend 查看依赖该服务的其他服务 |
| 权限要求 | 需要管理员权限 |
典型使用场景
- 批量脚本里重启服务,需要等停止完成后再发起启动
- 图形界面无法停止服务时改用命令行尝试
- 按依赖顺序启停:先停依赖方,再停被依赖的服务
- 启动失败时结合状态字段判断卡在哪一步
- 与 sc config 配合,把临时停用的服务改为手动后不再自启
常用示例
常用示例
REM 请求停止服务
sc stop Spooler
REM 立即查询会看到正在停止,稍后重试
sc query Spooler
REM 确认已停止后再启动
sc start Spooler
REM 查看依赖该服务的其他服务,评估影响
sc enumdepend Spooler
REM 用对象化命令拿结构化状态
powershell -c "Get-Service Spooler | Select-Object Name, Status"状态字段读法
| 状态 | 含义 | 下一步 |
|---|---|---|
| RUNNING | 已运行 | 正常,无需处理 |
| STOPPED | 已停止 | 可以执行启动 |
| START_PENDING | 正在启动 | 稍后重试查询,不要立即判定失败 |
| STOP_PENDING | 正在停止 | 等待依赖释放后再次确认 |
| PAUSED 与 PAUSE_PENDING | 已暂停或正在暂停 | 仅支持暂停的服务会出现 |
脚本里重启服务的正确顺序是:发起停止、轮询到已停止、再发起启动、再轮询到已运行。直接连发停止与启动两条命令,经常因状态尚未切换而失败。
停止被依赖的服务会连带影响上层业务,例如应用服务依赖数据库服务。动手前先用依赖查询确认影响范围,并在维护窗口内操作。