我有一个使用SQL Server数据库的Windows服务。 我无法控制服务的安装,但想要添加服务的依赖关系,以确保它在SQL服务器启动后启动。 (SQL服务器与所讨论的服务在同一台机器上运行)
有没有一个工具来添加依赖项或可能直接编辑registry?
这也可以通过提升命令提示符使用sc
命令来完成。 语法是:
sc config [service name] depend= <Dependencies(separated by / (forward slash))>
注 :等号后面有空格,前面没有空格。
警告 : depend=
参数将覆盖现有的依赖项列表,而不是追加。 例如,如果ServiceA已经依赖于ServiceB和ServiceC,那么如果运行depend= ServiceD
,则ServiceA现在将仅依赖于ServiceD。 (谢谢Matt !)
sc config ServiceA depend= ServiceB
上面的意思是ServiceB在ServiceB启动之前不会启动。 如果停止ServiceB,ServiceA将自动停止。
sc config ServiceA depend= ServiceB/ServiceC/ServiceD/"Service Name With Spaces"
上面的意思是,ServiceA,ServiceC和ServiceD都启动之前,ServiceA不会启动。 如果您停止任何ServiceB,ServiceC或ServiceD,ServiceA将自动停止。
sc config ServiceA depend= /
sc qc ServiceA
可以通过使用regedit
命令将“DependOnService”值添加到registry中的服务来添加服务依赖项,可以在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<Service name>
下findHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<Service name>
。 详细信息可以在MS知识库文章193888中find ,从中可以看到以下摘录:
要创build新的依赖关系,请select代表要延迟的服务的子项,单击编辑,然后单击添加值。 创build数据types为REG_MULTI_SZ的新值名称“DependOnService”(不带引号),然后单击确定。 出现“数据”对话框时,请在该服务之前键入您希望启动的服务的名称或名称,每行一个条目,然后单击“确定”。
如果您有兴趣,我写了一个简单的.net应用程序来pipe理服务依赖关系。 免费。
http://webpages.charter.net/bushman4/servicedependencymanager.html
我正在寻找一个纯粹的PowerShell(没有registry或sc.exe)方法,可以在2008R2 / Win7和更新的工作,并提出了这个:
简单的是用PowerShell做registry:
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation' -Name DependOnService -Value @('Bowser','MRxSmb20','NSI')
或者,使用WMI:
$DependsOn = @('Bowser','MRxSmb20','NSI','') #keep the empty array element at end $svc = Get-WmiObject win32_Service -filter "Name='LanmanWorkstation'" $svc.Change($null,$null,$null,$null,$null,$null,$null,$null,$null,$null,$DependsOn)
Win32_Service类的Change方法有助于指出一个解决scheme:
uint32 Change( [in] string DisplayName, [in] string PathName, [in] uint32 ServiceType, [in] uint32 ErrorControl, [in] string StartMode, [in] boolean DesktopInteract, [in] string StartName, [in] string StartPassword, [in] string LoadOrderGroup, [in] string LoadOrderGroupDependencies[], [in] string ServiceDependencies[] );