要改变
Windows服务的启动顺序,只要修改
Windows的注册表就可以了。任何
Windows服务的注册
信息可以在注册表的HKEY_LOCAL_MACHINE\
. h! E0 R; I A7 @7 D, ]SYSTEM\CurrentControlSet\Services\%26lt;ServiceName%26gt;\键下找到。下面就介绍几个与服务启动顺序相关的服务的值:
0 G/ e4 g: I3 o& X, i3 I; p Group值:一个REG_SZ
类型的值。它用来
描述服务属于那一个服务组。如果服务没有这一项,那么它不属于任何一个服务组,
系统则会默认的将其在所有的服务启动后加载。
5 `5 H, t6 l8 H8 A9 g
Tag值:一个REG_DWORD类型的值。它用来描述服务的标识。每一个在服务组中的服务都会被分配一个唯一的标识。注册表通过对服务组的服务标识的排列来安排,同一服务组中的个服务的加载先后顺序。
0 V: f; `* e" W2 D ^
[color=#FFFFFF']
8 I& O- `# O# V% H. L
2 a, N7 t/ j8 N1 i
那么,如何改变服务的启动顺序,现在就被分为了两个步骤,一是:改变服务组的启动顺序。二是:改变服务组中各服务的启动顺序。
7 { z% G' V: k* _: [% M& ?. N
[color=#FFFFFF']
, [1 }. C8 C* k' Z* }! ~/ l9 e4 @8 ^6 F8 m2 k# I: P5 v$ U; F
先来介绍第一步:注册表的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder键的List值中保存了表示服务组启动顺序的信息。每一个服务组都是一个字符串,通过字符串在值中排列的先后位置表示服务组被加载的先后顺序。要想改变服务组的加载顺序,只要改变它们的位置就可以了。方法:用Regedit32.exe(不是,Regedit.exe,因为,在这里双击List值后,只能看到十六进制的
数据,不便于修改。)打开该值,这是一个字符
编辑环境,改变里面的组的先后顺序,然后确定改动。服务组的启动顺序就搞定了。
9 a8 R7 u4 m. o, T. S 第二步:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList键下有各服务组中各服务启动顺序的信息。每个服务组信息都被保存为了一个REG_BINARY类型的值,如:PointerPort服务组的值为030000000200000001000000030000000。下面为了方便观察,我们把它处理为030000000200000001000000030000000它表示PointerPort服务组有三个服务,
TAG值为2的服务先加载,然后是TAG值为1的服务,最后是TAG值为3的服务加载(信息解读的顺序是从左到右)。要改变服务在组中的加载顺序,只要编辑这个二进制串就可以了。
' z0 l$ c8 k/ v
另外,我们还可以通过ChangeServiceConfigAPI或者sc.exe
程序(Windows2000ResourceKit包中的工具)来改变服务的加载顺序。这里就不一一细说了。