【问题标题】:C# Query Windows ServiceC# 查询 Windows 服务
【发布时间】: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


【解决方案1】:

您要查找的信息在 WMI 中可用。

在 PowerShell 中编写整个内容要比在纯 C# 中容易得多。 WMI 代码在 C#(或 C++,或 VBScript)中变得非常混乱,很快。这个 sn-p 演示了从计算机列表中获取数据。要嵌入 C#,只需使用 System.Management.Automation,并添加 PowerShell.Create().AddScript(...).Invoke()

$computerList = "a","b","c"
Get-WmiObject -computerName $computerList -asjob
    | Wait-job
    | receive-job
    | Select-Object DisplayName, Description, StartMode, State

希望这会有所帮助,

【讨论】:

  • 感谢您的回复。如果我从数据库中的表中拉出我的服务器怎么办?我创建了一个提取服务器 IP 的 SQL 阅读器。对不起,我把它排除在示例之外。
  • 然后您只需从该数据库中填充 $computerList 即可。 .NET 中的 SqlClient 类应该是您正在寻找的。您可以创建它 New-Object(对 PowerShell + SQL 的一些网络搜索将向您发送正确的路径)。
【解决方案2】:

上面的代码同样有效。只需将其添加到管理类

(@"\\" + serverIP + "\\root\\cimv2:Win32_Service")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多