如何:创建 ServiceController 组件实例

更新:2007 年 11 月

可以使用 ServiceController 组件连接到现有的服务并控制这些服务的行为。在创建 ServiceController 类的实例时,设置该实例的属性以使其与某个特定的 Windows 服务交互。然后可以使用该类启动、停止此服务和对此服务进行其他操作。

在管理功能中最可能用到 ServiceController。例如,可能会创建一个 Windows 或 ASP.NET Web 应用程序,该应用程序通过 ServiceController 组件实例将自定义命令发送到服务。这会很有用,因为服务控制管理器不支持自定义命令。

可以通过几种方法来创建 ServiceController 组件的实例:

  • 可以从“工具箱”的“组件”选项卡上将 ServiceController 组件的一个实例拖放到窗体设计器或其他设计器上。

  • 可以将 ServiceController 组件从“服务器资源管理器”添加到设计器。

  • 可以通过代码创建 ServiceController 类的实例。

创建 ServiceController 的实例后,必须针对该实例设置以下两个属性来标识与该实例进行交互的服务:计算机名和要控制的服务名。

说明:

默认情况下,MachineName 设置为本地计算机,因此,除非要将此组件实例设置为指向其他计算机,否则无需更改此设置。

说明:

显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您的当前设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见 Visual Studio 设置

从“服务器资源管理器”中创建和配置 ServiceController 组件

  1. 在“服务器资源管理器”中,如果您需要的服务器没有列出,则添加它。有关更多信息,请参见如何:访问和初始化服务器资源管理器/数据库资源管理器

  2. 展开“服务”节点,然后定位要对其执行管理任务的服务。

  3. 右击服务的名称,然后单击“添加到设计器”。

    项目中出现 ServiceController 组件,该组件被配置为与选定的服务进行交互。

从“工具箱”中创建并配置 ServiceController 组件

  1. 访问“工具箱”的“组件”选项卡。

  2. 选择 ServiceController 图标并将它拖放到窗体或组件的设计器图面上。

  3. 设置下列属性。

    属性

    设置

    MachineName

    该服务所在的计算机名称,“.”表示本地计算机。

    ServiceName

    要与之进行交互的服务名。

    提示:

    可以使用“服务器资源管理器”查看对于任何给定的服务应采用的 ServiceName 设置。在“服务器资源管理器”中选择感兴趣的服务,该服务的 ServiceName 随即出现在“属性”窗口中。

以编程方式创建并配置 ServiceController 组件

  1. 通过代码创建 ServiceController 类的一个实例。

  2. 设置 MachineNameServiceName 属性,以指示要控制的服务。

    下面的示例演示如何创建与本地计算机上的 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.");
            }
        }
    

请参见

任务

如何:对服务执行管理任务

如何:检索服务列表

概念

与现有服务进行通信的介绍