65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET Diagnostics - III,使用 C# 枚举系统服务和依赖项

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.60/5 (4投票s)

2001年3月19日

viewsIcon

107012

downloadIcon

776

如何获取系统上所有系统服务的列表,并找出它们的依赖项。

Sample Image - NetDiagnostics3.jpg

引言

在编写一些诊断工具并探索 System.Diagnostics 命名空间的系列文章中,本文展示了如何找出系统上正在运行的所有系统服务,以及最重要的,找到它们的依赖项。我发现后一部分非常有趣。每次我在系统上打开“服务”对话框或任务管理器查看正在运行的所有服务时,我都会想,如果关闭其中一项以释放一些资源会发生什么。但随后你必须考虑,如果此服务是系统上运行的另一个服务或应用程序的一部分会怎样。这个实用程序枚举并显示系统上正在运行的所有系统服务。它还列出了特定服务所依赖的所有服务以及依赖此服务的服务。

你是如何做到的?

.NET 框架提供了 System.ServiceProcess 命名空间。此命名空间包含用于安装和运行系统服务的类。在此命名空间中,您将找到一个名为 SystemController 的类。SystemController 在 NT 术语中只不过是系统服务。该类具有一个静态方法 GetServices(),它返回一个 SystemController 对象数组。此数组包含系统上运行的所有服务。

ServiceController [] controllers = 
    ServiceController.GetServices();

获取此数组后,枚举每个元素以获取有关每个服务的详细信息。SystemController 类具有许多属性,它们的名称不言自明。我不会详细介绍每个属性。我建议您查阅框架文档以获取更多详细信息。

  • DisplayName - 在服务小程序中为此服务显示的描述性名称。
  • Status - 服务状态,例如,正在运行、已停止等。
  • ServiceType - 对象引用的服务类型。
  • ServiceName  服务的简称。
  • CanStop - 指示是否可以随时停止该服务。
  • CanShutDown - 指示是否可以随时关闭该服务。
  • CanPauseAndContinue - 如果服务可以停止和继续。
  • DependentServices - 依赖此服务的服务列表。
  • ServicesDependOn - 此服务所依赖的服务列表。

ServiceController 类具有一些可用于启动和停止服务的方法。我没有在与本文附带的实用程序项目中展示这些方法的使用。但它们的使用非常简单。

查看与本文附带的源代码中的 InitList 方法。此函数展示了如何使用 SystemController 类中的所有属性。

// Check the status of this service to see if 
// it can be stopped
bool bCanStop = controllers[i].CanStop;
item.SetSubItem(3, bCanStop ? "Yes" : "No");

// Check if the service recieves notification when 
// system shuts down.
bool bCanShutDown = controllers[i].CanShutdown;
item.SetSubItem(4, bCanShutDown ? "Yes" : "No");

// Check if the service can be paused and continued.
bool bPauseNContinue = controllers[i].CanPauseAndContinue;
item.SetSubItem(5, bPauseNContinue ? "Yes" : "No");
© . All rights reserved.