五种常见Windows服务无法启动问题的排错方法
如果系统无法顺利启动,请按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) 服务的可执行文件丢失或者被破坏。
3.解决办法
以“task scheduler”服务为例。
如果注册表键值imagepath的数值数据被篡改,可以定位以下注册表项:
hkey_local_machine\system\currentcontrolset\services\schedule
在右侧定位到imagepath键值,将其数值数据修改为正确的值,并重启系统。
或者借助sc命令:
sc config schedule binpath= "%systemroot%\system32\svchost.exe -k netsvcs"
如果是可执行文件丢失或者破坏,请用正确的副本进行替换,并重启系统。对于本例来说,可执行文件是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”服务的可执行程序参数是“svchost.exe -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组里,然而在“服务”管理单元窗口里,该服务的命令行为“svchost.exe -k dcomlaunch”,也就是说实际上并没有一个svchost进程实例负责启动termsvcs服务组!
错误126:找不到指定的模块
1.故障现象
尝试在“服务”管理单元窗口手动启动服务时,系统提示“错误126:找不到指定的模块”(error 126: the specified module could not be found.),如图6所示。
这类服务所对应的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:此服务的帐户不同于运行于同一进程上的其他服务的帐户
尝试在“服务”管理单元窗口手动启动服务时,系统提示“错误1079:此服务的帐户不同于运行于同一进程上的其他服务的帐户”,如图7所示。
2.原因分析
该故障通常在由svchost服务宿主进程所启动的服务上发生。前面说过windows xp sp2最多可以启动七个svchost进程实例,分别负责启动一组服务。一组服务中的每个服务必须和对应的svchost进程实例运行在同一个启动帐户下。例如alert服务属于localservice组的服务,其对应的svchost进程实例运行在local service帐户下,如果错误地将alert服务的启动帐户修改为别的帐户,例如local system帐户,就会报错。
3.解决办法
首先根据该服务的可执行文件路径属性找到其所属的服务组,例如alert服务属于localservice的服务组,然后确定同一组的其他服务的启动帐户,将其修改为相同的启动帐户即可。
服务启动失败的原因是多种多样的,但一个普遍的解决方法,通常是注意系统给出的错误提示,以及eventvwr.msc中的系统日志。
下一篇: 肇庆中秋节有什么地方好玩 这些必去
推荐阅读
-
windows无法启动MySQL服务报错1067的解决方法
-
C#启动windows服务方法的相关问题分析
-
Windows 64 位 mysql 5.7以上版本包解压中没有data目录和my-default.ini及服务无法启动的快速解决办法(问题小结)
-
windows无法启动MySQL服务报错1067的解决方法
-
eclipse部署tomcat服务器无法启动问题的解决方法
-
C#启动windows服务方法的相关问题分析
-
Windows 64 位 mysql 5.7以上版本包解压中没有data目录和my-default.ini及服务无法启动的快速解决办法(问题小结)
-
Windows系统下Apache服务器无法启动的问题解决
-
mysql出现无法使用、无法启动服务问题的解决方法
-
SQL Server代理服务无法启动问题的解决方法