在微软新闻组⾥有很多⽹友咨询有关Windows服务⽆法启动的问题,例如⽆法启动“Logical Disk Manager”服务。这类服务出错的现象往往是五花⼋门,判断起来⽐较⿇烦,⽽且有些问题还⽆法通过查看微软知识库⽂章得到解决。所以这⾥进⾏⼀个简单的⼩结,帮助初学者解决常见的服务⽆法启动的问题。特别提醒在阅读本⽂的时候,请严格按照故障现象进⾏⽐对排错!如果涉及到注册表操作,请务必事先备份相关注册表项,并新建还原点。
如果系统⽆法顺利启动,请按Reset键重新开机,然后按F8,在Windows⾼级启动菜单上选择“恢复到最近⼀次的正确配置”菜单项,这样就可以先前的HKLM\SYSTEM\ControlSet00n覆盖错误配置的CurrentControlSet(ControlSet00n中的n由
HKLM\SYSTEM\Select的LastKnownGood键值指定)。
错误2:系统不到指定的⽂件
1.故障现象尝试在“服务”管理单元窗⼝⼿动启动服务是,系统提⽰“错误2:系统不到指定的⽂件”(Error 2: The system cannot find the file specified.),如图1所⽰。
2.原因分析
两种可能:
(1) 服务的可执⾏⽂件丢失或者被破坏。
(2) 服务相关注册表键值ImagePath的数值数据被篡改,导致SCM⽆法加载服务的可执⾏⽂件。在“服务”管理单元窗⼝⾥可以看到每个服务的可执⾏⽂件路径,请仔细检查如图2所⽰的可执⾏⽂件所在路径,如果和参照系统的正确配置不符合,说明注册表键值ImagePath的数值数据有误。如果此处的配置没有问题,则说明可执⾏⽂件丢失或者被破坏。
3.解决办法
以“Task Scheduler”服务为例。
如果注册表键值ImagePath的数值数据被篡改,可以定位以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule
在右侧定位到ImagePath键值,将其数值数据修改为正确的值,并重启系统。
或者借助sc命令:
sc config Schedule binpath= "%SystemRoot%\ -k netsvcs"
windows错误恢复如果是可执⾏⽂件丢失或者破坏,请⽤正确的副本进⾏替换,并重启系统。对于本例来说,可执⾏⽂件是svchost,如果该⽂件被破坏,系统将⽆法正常运⾏。
错误1053:服务没有及时相应启动或控制请求
1.故障现象
尝试在“服务”管理单元窗⼝⼿动启动服务时,系统提⽰“错误1053:服务没有及时相应启动或控制请求”,如图3所⽰。
2.原因分析
如图2所⽰,可执⾏⽂件的附加命令参数配置有误,会导致问题。
3.解决办法
参照上述的⽅法,⽤sc命令或者注册表编辑器,对附加的命令参数进⾏排错。
错误1083:配置成在该可执⾏程序中运⾏的这个服务不能执⾏该服务
1.故障现象
尝试在“服务”管理单元窗⼝⼿动启动服务时,系统提⽰“错误1083:配置成在该可执⾏程序中运⾏的这个服务不能执⾏该服
务”,如图4所⽰。 2.原因分析
该故障通常在由svchost服务宿主进程所启动的服务上发⽣。⼤家知道Windows XP SP2最多可以启动七个svchost进程实例(实际上启动六个进程实例),分别负责启动⼀组服务。每个svchost实例所负责启动的服务由以下注册表项决定:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost
其下共有七个键值:DcomLaunch、HTTPFilter、imgsvc、LocalService、netsvcs、NetworkService、rpcss和termsvcs。每个键值都定义了⼀个或者多个服务,也就是对应每个svchost进程实例所能启动的⼀组服务。
本例中“Task Scheduler”服务的可执⾏程序参数是“ -k netsvcs”,对应的svchost进程在启动该服务之前,会先到HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost下的netsvcs键值⾥查是否有该服务的定义,如果没有,就会出现该故障现象。
3.解决办法
很简单,⾸先打开该服务的属性对话框,查看其可执⾏程序的命令参数(本例是netsvcs),如图2所⽰。
然后进⼊以下注册表项:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost
在右侧定位到对应的键值,本例是netsvcs,在其数值数据⾥添加该服务名即可,本例是Schedule,如图5所⽰,并重启系统。
提⽰为什么通常只会启动六个svchost进程实例?都是TermService服务惹的祸!TermService(Terminal Services)这个服务⾮常另类,不仅仅出现在DcomLaunch组⾥,同时还独⽴出现在termsvcs组⾥,然⽽在“服务”管理单元窗⼝⾥,该服务的命令⾏为“ -k DcomLaunch”,也就是说实际上并没有⼀个svchost进程实例负责启动termsvcs服务组!
错误126:不到指定的模块
1.故障现象
尝试在“服务”管理单元窗⼝⼿动启动服务时,系统提⽰“错误126:不到指定的模块”(Error 126: The specified module could not be found.),如图6所⽰。
2.原因分析该故障通常在由svchost服务宿主进程所启动的服务上发⽣。这⼀类的Windows服务,其实是以dll模块的形式插⼊某个svchost进程。如果该dll⽂件被破坏,或者注册表的相关键值被篡改,都可能导致问题。
这类服务所对应的Dll⽂件,是由HKLM\SYSTEM\CurrentControlSet\Services\ServiceName\Parameters注册表项下的ServiceDll键值所定义的(此处的ServiceName是指服务名),如果该注册表键值出错,或者对应的Dll⽂件被破坏,就会导致这个问题。在微软新闻组⾥有不少⽹友抱怨⽆法打开“磁盘管理”窗⼝,寻根溯源发现是“Logical Disk Manager”服务⽆法启动所导致。其中有⼀个case是系统被⽊马PCShare所感染,⽊马修改了“Logical Disk Manager”服务的注册表键值,把
HKLM\SYSTEM\CurrentControlSet\Services\dmserver\Parameters注册表项下的键值ServiceDll的数值数据指向⽊马的⽂
件“%SystemRoot%\System32\drivers\Ybfbqufe.sys”,尽管后来利⽤杀毒软件杀除⽊马,但是杀毒软件未能处理被⽊马篡改注册表键值,导致⽆法打开“磁盘管理”。
注意不要将该故障和“错误2:系统不到指定的⽂件”相混淆!
3.解决办法
对于“Logical Disk Manager”服务的问题,在以下的注册表项:
HKLM\SYSTEM\CurrentControlSet\Services\dmserver\Parameters
确保将其下ServiceDll键值的数值数据修改为“%SystemRoot%\System32\dmserver.dll”。
如果注册表键值没有问题,请确保⽤正确的⽂件副本替换原来的dll⽂件,并重启系统。
错误1079:此服务的帐户不同于运⾏于同⼀进程上的其他服务的帐户
1.故障现象
尝试在“服务”管理单元窗⼝⼿动启动服务时,系统提⽰“错误1079:此服务的帐户不同于运⾏于同⼀进程上的其他服务的帐户”,如图7所⽰。
2.原因分析
该故障通常在由svchost服务宿主进程所启动的服务上发⽣。前⾯说过Windows XP SP2最多可以启动七个svchost进程实例,分别负责启动⼀组服务。⼀组服务中的每个服务必须和对应的svchost进程实例运⾏在同⼀个启动帐户下。
例如Alert服务属于LocalService组的服务,其对应的svchost进程实例运⾏在Local Service帐户下,如果错误地将Alert服务的启动帐户修改为别的帐户,例如Local System帐户,就会报错。
3.解决办法
⾸先根据该服务的可执⾏⽂件路径属性到其所属的服务组,例如Alert服务属于LocalService的服务组,然后确定同⼀组的其他服务的启动帐户,将其修改为相同的启动帐户即可。
服务启动失败的原因是多种多样的,但⼀个普遍的解决⽅法,通常是注意系统给出的错误提⽰,以及eventvwr.msc中的系统⽇志。
发布评论