使用 C# 获取 Windows 服务依赖项
本文关键字:依赖 服务 Windows 获取 使用 | 更新日期: 2023-09-27 18:36:17
我可以使用PowerShell相当容易地做到这一点,但我正在寻找一种C#方法来做到这一点。使用 PS,我可以使用 Get-Service 遍历集合并检查其中称为 DependentServices 和 RequiredServices 的集合,以获取给定服务的依赖服务和必需服务的列表。
我已经使用查询"从Win32_Service中选择 *"研究了 WMI 模型,但这返回了一个Win32_Service对象的集合,这些对象似乎没有我感兴趣的集合。我觉得我在这里错过了一些东西。我环顾四周并尝试了各种搜索,但我还没有找到以 C# 为中心的方法来执行此操作。
我想查询给定的服务并取回上面提到的集合(依赖服务和必需服务)。对不起,如果我错过了显而易见的,但我真的无法找到相关主题。
您可以使用 ServiceController 类:
StringBuilder sb = new System.Text.StringBuilder();
foreach (var svc in System.ServiceProcess.ServiceController.GetServices())
{
sb.AppendLine("============================");
sb.AppendLine(svc.DisplayName);
foreach (var dep in svc.DependentServices)
{
sb.AppendFormat("'t{0}", dep.DisplayName);
sb.AppendLine();
}
}
MessageBox.Show(sb.ToString());
可以使用
Win32_DependentService
WMI 类和Associators of
句子来检索依赖服务。
试用此示例
using System;
using System.Collections.Generic;
using System.Management;
using System.Text;
namespace GetWMI_Info
{
class Program
{
static void Main(string[] args)
{
try
{
string ComputerName = "localhost";
ManagementScope Scope;
Scope = new ManagementScope(String.Format("''''{0}''root''CIMV2", ComputerName), null);
Scope.Connect();
ObjectQuery Query = new ObjectQuery("Associators of {Win32_Service.Name='NetMan'} Where AssocClass=Win32_DependentService ResultClass=Win32_Service");
ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query);
foreach (ManagementObject WmiObject in Searcher.Get())
{
Console.WriteLine("{0,-35} {1,-40}","Name",WmiObject["Name"]);// String
}
}
catch (Exception e)
{
Console.WriteLine(String.Format("Exception {0} Trace {1}",e.Message,e.StackTrace));
}
Console.WriteLine("Press Enter to exit");
Console.Read();
}
}
}
您可以使用此属性 -http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicecontroller.dependentservices.aspx
ServiceController sc = new ServiceController("Event Log");
ServiceController[] scServices = sc.DependentServices;
// Display the list of services dependent on the Event Log service.
if (scServices.Length == 0)
{
Console.WriteLine("There are no services dependent on {0}",
sc.ServiceName);
}
else
{
Console.WriteLine("Services dependent on {0}:",
sc.ServiceName);
foreach (ServiceController scTemp in scServices)
{
Console.WriteLine(" {0}", scTemp.DisplayName);
}
}