更新:2007 年 11 月
可以使用 ServiceController 组件连接到现有的服务并控制这些服务的行为。在创建 ServiceController 类的实例时,设置该实例的属性以使其与某个特定的 Windows 服务交互。然后可以使用该类启动、停止此服务和对此服务进行其他操作。
在管理功能中最可能用到 ServiceController。例如,可能会创建一个 Windows 或 ASP.NET Web 应用程序,该应用程序通过 ServiceController 组件实例将自定义命令发送到服务。这会很有用,因为服务控制管理器不支持自定义命令。
可以通过几种方法来创建 ServiceController 组件的实例:
- 可以从“工具箱”的“组件”选项卡上将 ServiceController 组件的一个实例拖放到窗体设计器或其他设计器上。 
- 可以将 ServiceController 组件从“服务器资源管理器”添加到设计器。 
- 可以通过代码创建 ServiceController 类的实例。 
创建 ServiceController 的实例后,必须针对该实例设置以下两个属性来标识与该实例进行交互的服务:计算机名和要控制的服务名。
| .gif) 说明: | 
|---|
| 默认情况下,MachineName 设置为本地计算机,因此,除非要将此组件实例设置为指向其他计算机,否则无需更改此设置。 | 
| .gif) 说明: | 
|---|
| 显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您的当前设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置。 | 
从“服务器资源管理器”中创建和配置 ServiceController 组件
- 在“服务器资源管理器”中,如果您需要的服务器没有列出,则添加它。有关更多信息,请参见如何:访问和初始化服务器资源管理器/数据库资源管理器。 
- 展开“服务”节点,然后定位要对其执行管理任务的服务。 
- 右击服务的名称,然后单击“添加到设计器”。 - 项目中出现 ServiceController 组件,该组件被配置为与选定的服务进行交互。 
从“工具箱”中创建并配置 ServiceController 组件
- 访问“工具箱”的“组件”选项卡。 
- 选择 ServiceController 图标并将它拖放到窗体或组件的设计器图面上。 
- 设置下列属性。 - 属性 - 设置 - MachineName - 该服务所在的计算机名称,“.”表示本地计算机。 - ServiceName - 要与之进行交互的服务名。 .gif) 提示: 提示:- 可以使用“服务器资源管理器”查看对于任何给定的服务应采用的 ServiceName 设置。在“服务器资源管理器”中选择感兴趣的服务,该服务的 ServiceName 随即出现在“属性”窗口中。 
以编程方式创建并配置 ServiceController 组件
- 通过代码创建 ServiceController 类的一个实例。 
- 设置 MachineName 和 ServiceName 属性,以指示要控制的服务。 - 下面的示例演示如何创建与本地计算机上的 IIS Admin 服务进行交互的 ServiceController 组件。该组件然后查询与控制器关联的服务,确定它是否可以接受“停止”命令;如果可以,则发出该命令。本示例是一个 Windows 项目的一部分。在该项目中,带有各种按钮的窗体用于启动、停止服务和对服务进行其他操作。每单击一次按钮,便计算条件并在标签控件中显示状态信息。 .gif) 说明: 说明:- 必须添加一个对 System.ServiceProcess.dll 的引用,并包括 System.ServiceProcess 命名空间的 Imports 或 using 语句,才能使这些示例运行。 - Sub Main() Dim myController As _ New System.ServiceProcess.ServiceController("IISAdmin") If myController.CanStop Then Debug.WriteLine(myController.ServiceName & " can be stopped.") Else Debug.WriteLine(myController.ServiceName & " cannot stop.") End If End Sub- public static void Main(string[] args) { System.ServiceProcess.ServiceController myController = new System.ServiceProcess.ServiceController("IISAdmin"); if (myController.CanStop) { System.Diagnostics.Debug.WriteLine( myController.DisplayName + " can be stopped."); } else { System.Diagnostics.Debug.WriteLine( myController.DisplayName + " cannot stop."); } }