如何查看阵列中特定服务的状态

时间:2016-06-22 15:50:59

标签: c#

我正在尝试查看字符串数组中多个服务的状态。

该服务可能并不总是存在于我将使用它的机器上,因此try

代码:

    public string[] service = { "MSSQL$AMTECHFASTTEST", "SQLBrowser" };
    public void stopService()
    {
        int i = 0;
        ServiceController[] scServices;
        scServices = ServiceController.GetServices(service[i]);

        try
        {
                foreach (ServiceController services in scServices)
                {
                    MessageBox.Show(service[i]+" " + services.Status.ToString(), "Service Status");
                    i++;
                }
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString(), "Error");
        }
    }

我认为导致错误的是ServiceController.GetServices(service[i])行,但我无法解决。

谢谢,

1 个答案:

答案 0 :(得分:2)

ServiceController.GetServices(string machineName)方法检索在主机 machineName 上运行的服务。

如果您想获取与程序在相同计算机上运行的服务,请使用不带参数的ServiceController.GetServices()

所以我认为你想要做的是这样的事情:

public string[] wantedServices = { "MSSQL$AMTECHFASTTEST", "SQLBrowser" };
public void stopService()
{
    ServiceController[] services = ServiceController.GetServices()
                                      .Where(svc => wantedServices.Contains(svc.ServiceName))
                                      .ToArray();

    try
    {
        foreach (ServiceController svc in services)
        {
            MessageBox.Show($"{svc.ServiceName} {svc.Status}", "Service Status");                    
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString(), "Error");
    }
}

这将获取当前计算机上包含wantedServices数组中名称的所有服务(为清楚起见,我更改了一些变量名称)。