C#检查windows服务状态

时间:2015-03-02 12:48:49

标签: windows-services

我使用以下代码检查我的Windows服务状态:

 ServiceController sc = new ServiceController("service name", "service location");

在服务地点H中输入我的服务所在的服务器名称。 在我的测试环境中,我有服务和门户(IIS),我在同一台服务器上检查我的服务,它工作正常,但在我的生产环境中,该服务与我的门户IIS不同。

我的代码无法检查状态。我确定这是一个权限问题,但我尝试了很多这样做才能使它工作但没用。

我的问题是:什么"许可类型"被赋予什么"用户"或"机器名称"?请帮忙。

2 个答案:

答案 0 :(得分:0)

您的IIS门户是否冒充?它似乎确实如此。因此,您将陷入Kerberos constrained delegation('两跳')。你无法修复'这个。您必须要求域管理员为您的IIS应用程序启用和配置约束委派。

另一种方法是来模拟您的IIS。在这种情况下,您需要为门户网站应用程序池授予适当的权限。 SC_MANAGER_CONNECT中所需的权限。阅读更多KB179249: Access to the Service Control Manager。显然,应用程序池必须是域帐户,并且IIS和目标服务主机应位于同一域中,或者位于具有信任关系的域中。

答案 1 :(得分:0)

无论如何,感谢所有人,我已经通过WMI使用了另一种方式,它起作用了:

  ConnectionOptions op = new ConnectionOptions();
        op.Username = "";
        op.Password = "";
        ManagementScope scope = new ManagementScope(SVClocation+@"\root\cimv2", op);
        scope.Connect();
        ManagementPath path = new ManagementPath("Win32_Service");
        ManagementClass services = new ManagementClass(scope, path, null);
        foreach (ManagementObject service in services.GetInstances())
        {
            if (service.GetPropertyValue("Name").ToString().ToLower().Equals("serviceName"))
            {
                if (service.GetPropertyValue("State").ToString().ToLower().Equals("running"))
                {
                    //do something
                }
                else
                {
                    //do something
                }
            }
        }