我正在尝试收集有关在我的域中的各种服务器上运行的服务的数据。对于要检查的每个服务器,我将获得服务列表
ServiceController[] services = ServiceController.GetServices(server);
从那里,我检查服务中的每个ServiceController对象的ServiceStartMode和ServiceControllerStatus
if (sc.StartType == ServiceStartMode.Automatic && sc.Status != ServiceControllerStatus.Running)
我遇到的问题是自动(延迟启动)服务 - 我想从上面的条件语句中排除这些服务,但是Delayed Start似乎不是ServiceStartMode枚举的成员。
如果某项服务是延迟启动,我可以通过哪些方式查找这些服务?
答案 0 :(得分:0)
Windows将其服务数据保存在\\ HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services下的注册表中。
您可以查询服务的开始和 DelayedAutostart 值来检查这一点。如果您手动将服务设置为自动(延迟启动),则仅在重新启动后才会创建DelayedAutostart值。
private static bool GetDelayedStatus(string serviceName, string machineName)
{
using (var regKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, machineName))
{
using (RegistryKey serviceKey = regKey.OpenSubKey(@"System\CurrentControlSet\Services\" + serviceName, true))
{
int startMode = (int)serviceKey.GetValue("Start", 0, RegistryValueOptions.None);
int delayedAutostart = (int)serviceKey.GetValue("DelayedAutostart", 0, RegistryValueOptions.None);
return startMode == 2 && delayedAutostart == 1;
}
}
}