我使用以下代码检查我的Windows服务状态:
ServiceController sc = new ServiceController("service name", "service location");
在服务地点H中输入我的服务所在的服务器名称。 在我的测试环境中,我有服务和门户(IIS),我在同一台服务器上检查我的服务,它工作正常,但在我的生产环境中,该服务与我的门户IIS不同。
我的代码无法检查状态。我确定这是一个权限问题,但我尝试了很多这样做才能使它工作但没用。
我的问题是:什么"许可类型"被赋予什么"用户"或"机器名称"?请帮忙。
答案 0 :(得分:0)
您的IIS门户是否冒充?它似乎确实如此。因此,您将陷入Kerberos constrained delegation('两跳')。你无法修复'这个。您必须要求域管理员为您的IIS应用程序启用和配置约束委派。
另一种方法是不来模拟您的IIS。在这种情况下,您需要为门户网站应用程序池授予适当的权限。 SC_MANAGER_CONNECT
中所需的权限。阅读更多KB179249: Access to the Service Control Manager。显然,应用程序池必须是域帐户,并且IIS和目标服务主机应位于同一域中,或者位于具有信任关系的域中。
答案 1 :(得分:0)
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
}
}
}