一台办公机的打印服务起不来,事件查看器里刷满红色条目,来源都是 Service Control Manager,编号 7000 和 7009。用户只说打印机又抽风了,实际是后台某个依赖服务没起来。SCM 就是 Windows 的服务管家,服务的启动、停止、失败重启全归它管。
7000 和 7009 说的不是一件事
7000 是服务启动失败,后面通常跟错误码:1053 表示启动超时,2 表示找不到文件,5 表示拒绝访问。7009 是等待服务连接超时,三十秒内服务没向 SCM 报到。前者多半是配置或文件问题,后者常见于服务卡死或者依赖的数据库连不上。
先用 sc 把状态问清楚
sc query SpoolerSTATE 是 RUNNING、STOPPED 还是 START_PENDING,一眼能看出卡在哪一步。查依赖用 sc qc 加服务名,DEPENDENCIES 那一行列出了必须先启动的服务。图形界面在 services.msc 里双击服务,切到依赖关系选项卡,看到的是同一份信息。
启动账户和执行路径是最常见的两个雷
服务跑在哪个账户下,决定了它能访问哪些目录。默认 LocalSystem 权限极大,改成域账号后如果没给「作为服务登录」的权限,启动直接报 1069。另一个是执行文件路径里带空格没加引号,路径被截断,报 2 找不到文件。
失败之后自动重启要自己配
服务属性里的恢复选项卡,第一次失败、第二次失败可以设成重新启动服务,重置失败计数填一天。命令行等价写法是 sc failure 服务名 reset= 86400 actions= restart/60000。不配这个,服务半夜挂掉就一直停着,第二天才发现。
别急着改注册表里的超时
很多帖子让你把 ServicesPipeTimeout 拉长到 120000 毫秒,那只是把问题往后推。先看服务自己的日志:数据库连不上、端口被占用、证书过期,这些才是根因。真要靠延时才能起来,说明初始化逻辑本身有问题,改系统参数只会掩盖它。
依赖服务也会连环挂
打印服务依赖 RPC 和 Spooler 本身,SQL 相关服务依赖远程过程调用和 TCP/IP。排查时对每个依赖项单独 sc query 一次,别只看最外层那个。有依赖的服务停不掉时,加 /force 是连依赖一起停,操作前确认没别的业务在用。
处理顺序就三步:看事件里的错误码、查依赖和账户、再看服务自己的日志。改超时是最后手段。