是否有工具来添加依赖项或直接编辑注册表?
#1 楼
也可以使用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
以上意味着ServiceA将在ServiceB启动之前无法启动。如果停止ServiceB,则ServiceA将自动停止。
对多个其他服务的依赖关系:
sc config ServiceA depend= ServiceB/ServiceC/ServiceD/"Service Name With Spaces"
以上表示ServiceA在ServiceB之前不会启动。 ,ServiceC和ServiceD已全部启动。如果您停止ServiceB,ServiceC或ServiceD中的任何一个,ServiceA将自动停止。
删除所有依赖项:
sc config ServiceA depend= /
列出当前依赖项:
sc qc ServiceA
#2 楼
您可以通过使用regedit
命令将“ DependOnService”值添加到注册表中的服务中来添加服务依赖项,可以在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<Service name>
下找到服务。有关详细信息,请参见MS KB文章193888,其摘录来自以下内容:要创建新的依赖项,请选择表示您所使用服务的
子项
要延迟,请单击“编辑”,然后
单击“添加值”。使用数据类型为
名称“ DependOnService”(不带
引号),然后单击“确定”。当出现
数据对话框时,键入
您希望在该服务之前启动的服务的名称或名称
,每行有一个条目,然后
/>单击确定。
评论
天啊!那是我收到的最快的答案。我几乎没有回到主页。
–里克
2009年6月12日14:55
#3 楼
我一直在寻找一种可以在2008R2 / Win7及更高版本上运行的纯PowerShell方法(无regedit或sc.exe),并提出了以下建议:一个简单的方法就是使用PowerShell进行regedit:
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方法有助于指出解决方案:
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[]
);
#4 楼
如果您感兴趣,我编写了一个简单的.net应用程序来管理服务依赖性。它是免费的。http://webpages.charter.net/bushman4/servicedependencymanager.html
评论
它告诉我我需要.NET 1.1,但我正在运行Windows 7
–尼克
14年6月17日在17:41
.Net 1.1需要在Windows 7上安装。请参见以下问题的答案:answers.microsoft.com/en-us/windows/forum/…
– Glenn Sullivan
14年6月18日在18:29
确实,在2014年,您建议在Win7上安装.NET 1.1,而不是仅将其重新编译为4.0?不用了
– Endrju
15年7月3日在21:43
#5 楼
在C ++(ATL)中,我确实喜欢这样bool ModifyDependOnService(void)
{
CRegKey R;
if (ERROR_SUCCESS == R.Open(HKEY_LOCAL_MACHINE, L"SYSTEM\CurrentControlSet\services\MyService"))
{
bool depIsThere = false;
// determine if otherservice is installed, if yes, then add to dependency list.
SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if (hSCManager)
{
SC_HANDLE hService = OpenService(hSCManager, L"OtherService", SERVICE_QUERY_STATUS);
if (hService)
{
depIsThere = true;
CloseServiceHandle(hService);
}
CloseServiceHandle(hSCManager);
}
std::wstring key = L"DependOnService";
if (depIsThere )
{
const wchar_t deps[] = L"RPCSSq4312078qOtherServiceq4312078q";
R.SetValue(key.c_str(), REG_MULTI_SZ, deps, sizeof(deps));
}
R.Close();
return true;
}
return false;
}
评论
如果要在使用Kip的方法更改现有依赖关系之前先查看它们,则可以键入sc qc YourServiceName
– mivk
2011年10月1日17:43
请小心...我只是使用了这个,却没有意识到它会覆盖现有的依赖关系..我不记得有两个服务对象..现在它们消失了..哦!因此,请确保您运行首先提到的命令@mivk,以首先查看其他依赖项。
–马特
13年3月28日在15:49
您可以使用sc qc [service name]命令查询当前配置的服务依赖性。
– gerrytan
13年8月27日在6:57
如果像我一样,您的服务名称中有空格,请将其用引号引起来。
–拉兹洛
2014年3月18日在8:46
如果使用Powershell,请确保使用sc.exe,否则会出现错误:“找不到接受参数的位置参数”
– spudder
15年4月17日在23:42