五種常見Windows服務沒法啓動問題的排錯方法

在使用windows過程當中常常遇到服務啓動問題,判斷起來比較麻煩,並且有些問題還沒法經過查看微軟知識庫文章獲得解決。因此這裏進行一個簡單的小結,幫助初學者解決常見的服務沒法啓動的問題
在微軟新聞組裏有不少網友諮詢有關Windows服務沒法啓動的問題,例如沒法啓動「Logical Disk Manager」服務。這類服務出錯的現象每每是五花八門,判斷起來比較麻煩,並且有些問題還沒法經過查看微軟知識庫文章獲得解決。因此這裏進行一個簡單的小結,幫助初學者解決常見的服務沒法啓動的問題。 特別提醒在閱讀本文的時候,請嚴格按照故障現象進行比對排錯!若是涉及到註冊表操做,請務必事先備份相關注冊表項,並新建還原點。

若是系統沒法順利啓動,請按Reset鍵從新開機,而後按F8,在Windows高級啓動菜單上選擇「恢復到最近一次的正確配置」菜單項,這樣就能夠先前的HKLM\SYSTEM\ControlSet00n覆蓋錯誤配置的CurrentControlSet(ControlSet00n中的n由HKLM\SYSTEM\Select的LastKnownGood鍵值指定)。css

錯誤2:系統找不到指定的文件windows

1.故障現象嘗試在「服務」管理單元窗口手動啓動服務是,系統提示「錯誤2:系統找不到指定的文件」(Error 2: The system cannot find the file specified.),如圖1所示。

2.緣由分析編輯器

兩種可能:命令行


(1) 服務的可執行文件丟失或者被破壞。日誌

(2) 服務相關注冊表鍵值ImagePath的數值數據被篡改,致使SCM沒法加載服務的可執行文件。在「服務」管理單元窗口裏能夠看到每一個服務的可執行文件路徑,請仔細檢查如圖2所示的可執行文件所在路徑,若是和參照系統的正確配置不符合,說明註冊表鍵值ImagePath的數值數據有誤。若是此處的配置沒有問題,則說明可執行文件丟失或者被破壞。


3.解決辦法server

以「Task Scheduler」服務爲例。進程

若是註冊表鍵值ImagePath的數值數據被篡改,能夠定位如下注冊表項:ci

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Schedulerpc

在右側定位到ImagePath鍵值,將其數值數據修改成正確的值,並重啓系統。io

或者藉助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所示。


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中的系統日誌。

相關文章
相關標籤/搜索