首页/系统/Windows 运维速查/服务依赖关系排查

服务依赖关系排查

查清“谁依赖我、我依赖谁”:停止/启动失败经常是依赖链问题,先看依赖再动手。

Windows 运维速查系统更新于 2026-10-13

服务依赖关系是什么

Windows 服务之间存在依赖链:某些服务必须等别的服务先起来才能启动,另一些服务被停掉时,依赖它的服务会一并受影响。依赖关系分两个方向,DependentServices 是“依赖我的”,RequiredServices 是“我依赖的”,搞反方向是最常见的误判。排查启动失败、停止失败、重启顺序问题时,先看这张图再动手,比反复试探快得多。

基本信息

适用平台Windows 全版本;sc 与 PowerShell 均可用
PowerShell 语法Get-Service -Name X -DependentServices / -RequiredServices
sc 语法sc enumdepend <服务名> [枚举上限]
方向含义DependentServices 依赖我;RequiredServices 我依赖
相关配置sc qc 可看 DEPENDENCIES 一行
典型场景停服前的爆炸半径评估

典型使用场景

  • 停用某个服务前,评估会连带影响哪些业务服务
  • 诊断“服务启动失败”,确认是不是依赖项没就绪
  • 规划维护顺序:先停上游,再停下游,启动时反过来
  • 排查某个底层服务被重启后,哪些业务没自动恢复
  • 梳理资产:识别哪些服务是关键路径上的公共依赖

常用示例

常用示例
Get-Service -Name LanmanServer -DependentServices          # 谁依赖它(停它的影响面)
Get-Service -Name LanmanServer -RequiredServices           # 它依赖谁(启动失败先看这些)
sc enumdepend RpcSs                                        # sc 侧列出依赖枚举
sc qc MySvc | Select-String DEPENDENCIES                   # 看服务配置里的依赖字段
Get-Service | Where-Object { $_.Status -ne 'Running' } | Select-Object Name, StartType, Status   # 未启动服务盘点
Get-Service -Name MySvc -RequiredServices | Select-Object Name, Status   # 依赖项状态

依赖字段读法

项目含义排查用法
DependentServices依赖当前服务的服务决定停服的影响面
RequiredServices当前服务依赖的服务启动失败时先查这些
sc qc 的 DEPENDENCIES配置中声明的依赖检测是否存在循环依赖
启动类型自动/手动/禁用自动但未运行常是启动失败
链式传递依赖可以逐级嵌套逐级向上看,直到没有上一层
依赖链可以很长,停服务前顺着 DependentServices 一路看下去,能提前发现“停一个底层服务会让整台机器的共享、打印、备份一起下线”这种情况。
强行终止服务不会自动照顾依赖关系:依赖它的服务可能进入无法停止的状态,恢复时通常需要重启主机,所以能按顺序优雅停止就不要强杀。

易错点

  • 把 DependentServices 与 RequiredServices 看反,方向错了后面的判断全错
  • 不查依赖就停底层服务,引发一批业务服务报错,事故复盘时才发现有依赖链
  • 强行终止卡住的服务,导致依赖它的服务进入半死状态,最后只能重启整机
  • 只看第一层依赖,忽略嵌套:真正的业务影响可能藏在两三层之后

数据来源与参考

  • Microsoft Learn:Get-Service
  • Microsoft Learn:sc enumdepend

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌