我們可以通過修改Windows的註冊表來改變Windows服務的啟動順序,
Windows服務的註冊信息可以在註冊表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\\鍵下找到。

下面就介紹幾個與服務啟動順序相關的服務的鍵值:

Group值:一個REG_SZ類型的值。它用來描述服務屬於那一個服務組。
如果服務沒有這一項,那麼它不屬於任何一個服務組,系統則會預設的將其在所有的服務啟動後加載。

Tag值:一個REG_DWORD類型的值。它用來描述服務的標識。
每一個在服務組中的服務都會被分配一個唯一的標識。
註冊表通過對服務組的服務標識的排列來安排,同一服務組中的個服務的加載先後順序。

那麼,如何改變服務的啟動順序,現在就被分為了兩個步驟,
一是:改變服務組的啟動順序。
二是:改變服務組中各服務的啟動順序。

改變服務組的啟動順序:

註冊表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder鍵的List值中
保存了表示服務組啟動順序的信息。
每一個服務組都是一個字符串,通過字符串在值中排列的先後位置表示服務組被加載的先後順序。
要想改變服務組的加載順序,只要改變它們的位置就可以了。
方法:用Regedit32.exe(不是,Regedit.exe,因為,在這裡雙擊List值後,只能看到十六進制的資料,不便於修改。)
打開該值,這是一個字符編輯環境,改變裡面的組的先後順序,然後確定改動。服務組的啟動順序就搞定了。

改變服務組中各服務的啟動順序: 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList鍵下有各服務組中各服務啟動順序的信息。
每個服務組信息都被保存為了一個REG_BINARY類型的值,如:Pointer Port 服務組的值為030000000200000001000000030000000。
下面為了方便觀察,我們把它處理為03000000 02000000 01000000 030000000 它表示Pointer Port 服務組有三個服務,
TAG值為2的服務先加載,然後是TAG值為1的服務,最後是TAG值為3的服務加載(信息解讀的順序是從左到右)。
要改變服務在組中的加載順序,只要編輯這個二進制串就可以了。

另外,我們還可以通過ChangeServiceConfig API或者sc.exe程序(Windows 2000 Resource Kit包中的工具)
來改變服務的加載順序。這裡就不一一細說了。
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 buywater 的頭像
    buywater

    WaTeR°先生的相片日記

    buywater 發表在 痞客邦 留言(1) 人氣()