Windows服務(wù)無(wú)法啟動(dòng)問(wèn)題的五種排錯(cuò)方法
Windows服務(wù)無(wú)法啟動(dòng)問(wèn)題的五種排錯(cuò)方法
在微軟新聞組里有很多網(wǎng)友咨詢有關(guān)Windows服務(wù)無(wú)法啟動(dòng)的問(wèn)題,例如無(wú)法啟動(dòng)“Logical Disk Manager”服務(wù)。這類服務(wù)出錯(cuò)的現(xiàn)象往往是五花八門,判斷起來(lái)比較麻煩,而且有些問(wèn)題還無(wú)法通過(guò)查看微軟知識(shí)庫(kù)文章得到解決。所以這里學(xué)習(xí)啦小編就為大家整理一個(gè)簡(jiǎn)單的小結(jié),幫助初學(xué)者解決常見(jiàn)的服務(wù)無(wú)法啟動(dòng)的問(wèn)題。 特別提醒 在閱讀本文的時(shí)候,請(qǐng)嚴(yán)格按照故障現(xiàn)象進(jìn)行比對(duì)排錯(cuò)!如果涉及到注冊(cè)表操作,請(qǐng)務(wù)必事先備份相關(guān)注冊(cè)表項(xiàng),并新建還原點(diǎn)。
如果系統(tǒng)無(wú)法順利啟動(dòng),請(qǐng)按Reset鍵重新開(kāi)機(jī),然后按F8,在Windows高級(jí)啟動(dòng)菜單上選擇“恢復(fù)到最近一次的正確配置”菜單項(xiàng),這樣就可以先前的HKLM\SYSTEM\ControlSet00n覆蓋錯(cuò)誤配置的CurrentControlSet(ControlSet00n中的n由HKLM\SYSTEM\Select的LastKnownGood鍵值指定)。
錯(cuò)誤2:系統(tǒng)找不到指定的文件
1.故障現(xiàn)象 嘗試在“服務(wù)”管理單元窗口手動(dòng)啟動(dòng)服務(wù)是,系統(tǒng)提示“錯(cuò)誤2:系統(tǒng)找不到指定的文件”(Error 2: The system cannot find the file specified.),如圖1所示。
2.原因分析
兩種可能:
(1) 服務(wù)的可執(zhí)行文件丟失或者被破壞。
(2) 服務(wù)相關(guān)注冊(cè)表鍵值ImagePath的數(shù)值數(shù)據(jù)被篡改,導(dǎo)致SCM無(wú)法加載服務(wù)的可執(zhí)行文件。在“服務(wù)”管理單元窗口里可以看到每個(gè)服務(wù)的可執(zhí)行文件路徑,請(qǐng)仔細(xì)檢查如圖2所示的可執(zhí)行文件所在路徑,如果和參照系統(tǒng)的正確配置不符合,說(shuō)明注冊(cè)表鍵值ImagePath的數(shù)值數(shù)據(jù)有誤。如果此處的配置沒(méi)有問(wèn)題,則說(shuō)明可執(zhí)行文件丟失或者被破壞。
3.解決辦法
以“Task Scheduler”服務(wù)為例。
如果注冊(cè)表鍵值ImagePath的數(shù)值數(shù)據(jù)被篡改,可以定位以下注冊(cè)表項(xiàng):
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedule
在右側(cè)定位到ImagePath鍵值,將其數(shù)值數(shù)據(jù)修改為正確的值,并重啟系統(tǒng)。
或者借助sc命令:
sc config Schedule binpath= "%SystemRoot%\System32\svchost.exe -k netsvcs"
如果是可執(zhí)行文件丟失或者破壞,請(qǐng)用正確的副本進(jìn)行替換,并重啟系統(tǒng)。對(duì)于本例來(lái)說(shuō),可執(zhí)行文件是svchost,如果該文件被破壞,系統(tǒng)將無(wú)法正常運(yùn)行。
錯(cuò)誤1053:服務(wù)沒(méi)有及時(shí)相應(yīng)啟動(dòng)或控制請(qǐng)求
1.故障現(xiàn)象
嘗試在“服務(wù)”管理單元窗口手動(dòng)啟動(dòng)服務(wù)時(shí),系統(tǒng)提示“錯(cuò)誤1053:服務(wù)沒(méi)有及時(shí)相應(yīng)啟動(dòng)或控制請(qǐng)求”,如圖3所示。
2.原因分析
如圖2所示,可執(zhí)行文件的附加命令參數(shù)配置有誤,會(huì)導(dǎo)致問(wèn)題。
3.解決辦法
參照上述的方法,用sc命令或者注冊(cè)表編輯器,對(duì)附加的命令參數(shù)進(jìn)行排錯(cuò)。
錯(cuò)誤1083:配置成在該可執(zhí)行程序中運(yùn)行的這個(gè)服務(wù)不能執(zhí)行該服務(wù)
1.故障現(xiàn)象
嘗試在“服務(wù)”管理單元窗口手動(dòng)啟動(dòng)服務(wù)時(shí),系統(tǒng)提示“錯(cuò)誤1083:配置成在該可執(zhí)行程序中運(yùn)行的這個(gè)服務(wù)不能執(zhí)行該服務(wù)”,如圖4所示。 2.原因分析該故障通常在由svchost服務(wù)宿主進(jìn)程所啟動(dòng)的服務(wù)上發(fā)生。大家知道Windows XP SP2最多可以啟動(dòng)七個(gè)svchost進(jìn)程實(shí)例(實(shí)際上啟動(dòng)六個(gè)進(jìn)程實(shí)例),分別負(fù)責(zé)啟動(dòng)一組服務(wù)。每個(gè)svchost實(shí)例所負(fù)責(zé)啟動(dòng)的服務(wù)由以下注冊(cè)表項(xiàng)決定:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost
其下共有七個(gè)鍵值:DcomLaunch、HTTPFilter、imgsvc、LocalService、netsvcs、NetworkService、rpcss和termsvcs。每個(gè)鍵值都定義了一個(gè)或者多個(gè)服務(wù),也就是對(duì)應(yīng)每個(gè)svchost進(jìn)程實(shí)例所能啟動(dòng)的一組服務(wù)。
本例中“Task Scheduler”服務(wù)的可執(zhí)行程序參數(shù)是“svchost.exe -k netsvcs”,對(duì)應(yīng)的svchost進(jìn)程在啟動(dòng)該服務(wù)之前,會(huì)先到HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost下的netsvcs鍵值里查找是否有該服務(wù)的定義,如果沒(méi)有,就會(huì)出現(xiàn)該故障現(xiàn)象。
3.解決辦法
很簡(jiǎn)單,首先打開(kāi)該服務(wù)的屬性對(duì)話框,查看其可執(zhí)行程序的命令參數(shù)(本例是netsvcs),如圖2所示。
然后進(jìn)入以下注冊(cè)表項(xiàng):
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost
在右側(cè)定位到對(duì)應(yīng)的鍵值,本例是netsvcs,在其數(shù)值數(shù)據(jù)里添加該服務(wù)名即可,本例是Schedule,如圖5所示,并重啟系統(tǒng)。
提示 為什么通常只會(huì)啟動(dòng)六個(gè)svchost進(jìn)程實(shí)例?都是TermService服務(wù)惹的禍!TermService(Terminal Services)這個(gè)服務(wù)非常另類,不僅僅出現(xiàn)在DcomLaunch組里,同時(shí)還獨(dú)立出現(xiàn)在termsvcs組里,然而在“服務(wù)”管理單元窗口里,該服務(wù)的命令行為“svchost.exe -k DcomLaunch”,也就是說(shuō)實(shí)際上并沒(méi)有一個(gè)svchost進(jìn)程實(shí)例負(fù)責(zé)啟動(dòng)termsvcs服務(wù)組!
錯(cuò)誤126:找不到指定的模塊
1.故障現(xiàn)象
嘗試在“服務(wù)”管理單元窗口手動(dòng)啟動(dòng)服務(wù)時(shí),系統(tǒng)提示“錯(cuò)誤126:找不到指定的模塊”(Error 126: The specified module could not be found.),如圖6所示。
2.原因分析 該故障通常在由svchost服務(wù)宿主進(jìn)程所啟動(dòng)的服務(wù)上發(fā)生。這一類的Windows服務(wù),其實(shí)是以dll模塊的形式插入某個(gè)svchost進(jìn)程。如果該dll文件被破壞,或者注冊(cè)表的相關(guān)鍵值被篡改,都可能導(dǎo)致問(wèn)題。
這類服務(wù)所對(duì)應(yīng)的Dll文件,是由HKLM\SYSTEM\CurrentControlSet\Services\ServiceName\Parameters注冊(cè)表項(xiàng)下的ServiceDll鍵值所定義的(此處的ServiceName是指服務(wù)名),如果該注冊(cè)表鍵值出錯(cuò),或者對(duì)應(yīng)的Dll文件被破壞,就會(huì)導(dǎo)致這個(gè)問(wèn)題。在微軟新聞組里有不少網(wǎng)友抱怨無(wú)法打開(kāi)“磁盤管理”窗口,尋根溯源發(fā)現(xiàn)是“Logical Disk Manager”服務(wù)無(wú)法啟動(dòng)所導(dǎo)致。其中有一個(gè)case是系統(tǒng)被木馬PCShare所感染,木馬修改了“Logical Disk Manager”服務(wù)的注冊(cè)表鍵值,把HKLM\SYSTEM\CurrentControlSet\Services\dmserver\Parameters注冊(cè)表項(xiàng)下的鍵值ServiceDll的數(shù)值數(shù)據(jù)指向木馬的文件“%SystemRoot%\System32\drivers\Ybfbqufe.sys”,盡管后來(lái)利用殺毒軟件殺除木馬,但是殺毒軟件未能處理被木馬篡改注冊(cè)表鍵值,導(dǎo)致無(wú)法打開(kāi)“磁盤管理”。
注意 不要將該故障和“錯(cuò)誤2:系統(tǒng)找不到指定的文件”相混淆!
3.解決辦法
對(duì)于“Logical Disk Manager”服務(wù)的問(wèn)題,在以下的注冊(cè)表項(xiàng):
HKLM\SYSTEM\CurrentControlSet\Services\dmserver\Parameters
確保將其下ServiceDll鍵值的數(shù)值數(shù)據(jù)修改為“%SystemRoot%\System32\dmserver.dll”。
如果注冊(cè)表鍵值沒(méi)有問(wèn)題,請(qǐng)確保用正確的文件副本替換原來(lái)的dll文件,并重啟系統(tǒng)。
錯(cuò)誤1079:此服務(wù)的帳戶不同于運(yùn)行于同一進(jìn)程上的其他服務(wù)的帳戶
1.故障現(xiàn)象
嘗試在“服務(wù)”管理單元窗口手動(dòng)啟動(dòng)服務(wù)時(shí),系統(tǒng)提示“錯(cuò)誤1079:此服務(wù)的帳戶不同于運(yùn)行于同一進(jìn)程上的其他服務(wù)的帳戶”,如圖7所示。
2.原因分析
該故障通常在由svchost服務(wù)宿主進(jìn)程所啟動(dòng)的服務(wù)上發(fā)生。前面說(shuō)過(guò)Windows XP SP2最多可以啟動(dòng)七個(gè)svchost進(jìn)程實(shí)例,分別負(fù)責(zé)啟動(dòng)一組服務(wù)。一組服務(wù)中的每個(gè)服務(wù)必須和對(duì)應(yīng)的svchost進(jìn)程實(shí)例運(yùn)行在同一個(gè)啟動(dòng)帳戶下。
例如Alert服務(wù)屬于LocalService組的服務(wù),其對(duì)應(yīng)的svchost進(jìn)程實(shí)例運(yùn)行在Local Service帳戶下,如果錯(cuò)誤地將Alert服務(wù)的啟動(dòng)帳戶修改為別的帳戶,例如Local System帳戶,就會(huì)報(bào)錯(cuò)。
3.解決辦法
首先根據(jù)該服務(wù)的可執(zhí)行文件路徑屬性找到其所屬的服務(wù)組,例如Alert服務(wù)屬于LocalService的服務(wù)組,然后確定同一組的其他服務(wù)的啟動(dòng)帳戶,將其修改為相同的啟動(dòng)帳戶即可。
服務(wù)啟動(dòng)失敗的原因是多種多樣的,但一個(gè)普遍的解決方法,通常是注意系統(tǒng)給出的錯(cuò)誤提示,以及eventvwr.msc中的系統(tǒng)日志。