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