C#检查服务是否设置为自动(延迟启动)

时间:2018-01-11 15:25:38

标签: c# service

我正在尝试收集有关在我的域中的各种服务器上运行的服务的数据。对于要检查的每个服务器,我将获得服务列表

ServiceController[] services = ServiceController.GetServices(server);

从那里,我检查服务中的每个ServiceController对象的ServiceStartMode和ServiceControllerStatus

if (sc.StartType == ServiceStartMode.Automatic && sc.Status != ServiceControllerStatus.Running)

我遇到的问题是自动(延迟启动)服务 - 我想从上面的条件语句中排除这些服务,但是Delayed Start似乎不是ServiceStartMode枚举的成员。

如果某项服务是延迟启动,我可以通过哪些方式查找这些服务?

1 个答案:

答案 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;
        }
    }
}