【发布时间】:2011-07-15 18:40:52
【问题描述】:
我一直在使用一个应用程序来查询远程服务器上运行的 Windows 服务并将机器名称、服务名称和状态写入数据库。
但是,我也想尝试捕获启动类型(自动、手动、禁用)。我使用的是没有任何启动类型选项的服务控制器,所以我开始考虑使用管理类。这个类看起来有我需要的一切,但我不知道如何在我的远程服务器上使用它。对于服务控制器,我是这样做的:
ServiceController[] services = ServiceController.GetServices(serverIP);
foreach (ServiceController service in services)
{
var machine = service.MachineName;
var displayName = service.DisplayName;
var status = service.Status;
}
我在管理类上试过这个:
ManagementClass class1 = new ManagementClass(serverIP + "\\" + "Win32_Service");
foreach (ManagementObject ob in class1.GetInstances())
{
var machine = serverIP;
var displayName = ob.GetPropertyValue("Description");
var name = ob.GetPropertyValue("PathName");
var startMode = ob.GetPropertyValue("StartMode");
var status = ob.GetPropertyValue("State");
}
当然它没有用。任何人都知道如何使用管理类从远程机器获取服务?或者有没有其他方法使用Service Controller来获取启动类型?
我还尝试将它们结合起来,并将管理类 foreach 语句放在服务控制器中,但它陷入了无限循环。
【问题讨论】:
-
我想我是这样做的:(@"\\" + serverIP + "\\root\\cimv2:Win32_Service")。我将继续测试,因为现在我找不到服务名称的属性。
-
你的修复是有道理的;您总是将远程计算机称为 \\computername,而没有 @ 符号 C# 的东西,您将转义一个反斜杠。
-
如果有人想知道服务名称的属性只是名称。
标签: c# windows-services servicecontroller