ServiceController Třída

Definice

Představuje službu systému Windows a umožňuje připojení ke spuštěné nebo zastavené službě, manipulaci s ní nebo získání informací o této službě.

public ref class ServiceController : System::ComponentModel::Component
public ref class ServiceController : IDisposable
public class ServiceController : System.ComponentModel.Component
public class ServiceController : IDisposable
[System.ServiceProcess.ServiceProcessDescription("ServiceControllerDesc")]
public class ServiceController : System.ComponentModel.Component
type ServiceController = class
    inherit Component
type ServiceController = class
    interface IDisposable
[<System.ServiceProcess.ServiceProcessDescription("ServiceControllerDesc")>]
type ServiceController = class
    inherit Component
Public Class ServiceController
Inherits Component
Public Class ServiceController
Implements IDisposable
Dědičnost
ServiceController
Dědičnost
ServiceController
Atributy
Implementuje

Příklady

Následující příklad ukazuje použití ServiceController třídy k řízení příkladu SimpleService služby.

using System;
using System.ServiceProcess;
using System.Diagnostics;
using System.Threading;

namespace ServiceControllerSample
{
    class Program
    {
        public enum SimpleServiceCustomCommands
        { StopWorker = 128, RestartWorker, CheckWorker };
        static void Main(string[] args)
        {
            ServiceController[] scServices;
            scServices = ServiceController.GetServices();

            foreach (ServiceController scTemp in scServices)
            {

                if (scTemp.ServiceName == "Simple Service")
                {
                    // Display properties for the Simple Service sample
                    // from the ServiceBase example.
                    ServiceController sc = new ServiceController("Simple Service");
                    Console.WriteLine("Status = " + sc.Status);
                    Console.WriteLine("Can Pause and Continue = " + sc.CanPauseAndContinue);
                    Console.WriteLine("Can ShutDown = " + sc.CanShutdown);
                    Console.WriteLine("Can Stop = " + sc.CanStop);
                    if (sc.Status == ServiceControllerStatus.Stopped)
                    {
                        sc.Start();
                        while (sc.Status == ServiceControllerStatus.Stopped)
                        {
                            Thread.Sleep(1000);
                            sc.Refresh();
                        }
                    }
                    // Issue custom commands to the service
                    // enum SimpleServiceCustomCommands
                    //    { StopWorker = 128, RestartWorker, CheckWorker };
                    sc.ExecuteCommand((int)SimpleServiceCustomCommands.StopWorker);
                    sc.ExecuteCommand((int)SimpleServiceCustomCommands.RestartWorker);
                    sc.Pause();
                    while (sc.Status != ServiceControllerStatus.Paused)
                    {
                        Thread.Sleep(1000);
                        sc.Refresh();
                    }
                    Console.WriteLine("Status = " + sc.Status);
                    sc.Continue();
                    while (sc.Status == ServiceControllerStatus.Paused)
                    {
                        Thread.Sleep(1000);
                        sc.Refresh();
                    }
                    Console.WriteLine("Status = " + sc.Status);
                    sc.Stop();
                    while (sc.Status != ServiceControllerStatus.Stopped)
                    {
                        Thread.Sleep(1000);
                        sc.Refresh();
                    }
                    Console.WriteLine("Status = " + sc.Status);
                    String[] argArray = new string[] { "ServiceController arg1", "ServiceController arg2" };
                    sc.Start(argArray);
                    while (sc.Status == ServiceControllerStatus.Stopped)
                    {
                        Thread.Sleep(1000);
                        sc.Refresh();
                    }
                    Console.WriteLine("Status = " + sc.Status);
                    // Display the event log entries for the custom commands
                    // and the start arguments.
                    EventLog el = new EventLog("Application");
                    EventLogEntryCollection elec = el.Entries;
                    foreach (EventLogEntry ele in elec)
                    {
                        if (ele.Source.IndexOf("SimpleService.OnCustomCommand") >= 0 |
                            ele.Source.IndexOf("SimpleService.Arguments") >= 0)
                            Console.WriteLine(ele.Message);
                    }
                }
            }
        }
    }
}
// This sample displays the following output if the Simple Service
// sample is running:
//Status = Running
//Can Pause and Continue = True
//Can ShutDown = True
//Can Stop = True
//Status = Paused
//Status = Running
//Status = Stopped
//Status = Running
//4:14:49 PM - Custom command received: 128
//4:14:49 PM - Custom command received: 129
//ServiceController arg1
//ServiceController arg2
Imports System.ServiceProcess
Imports System.Diagnostics
Imports System.Threading



Class Program

    Public Enum SimpleServiceCustomCommands
        StopWorker = 128
        RestartWorker
        CheckWorker
    End Enum 'SimpleServiceCustomCommands

    Shared Sub Main(ByVal args() As String)
        Dim scServices() As ServiceController
        scServices = ServiceController.GetServices()

        Dim scTemp As ServiceController
        For Each scTemp In scServices

            If scTemp.ServiceName = "Simple Service" Then
                ' Display properties for the Simple Service sample 
                ' from the ServiceBase example
                Dim sc As New ServiceController("Simple Service")
                Console.WriteLine("Status = " + sc.Status.ToString())
                Console.WriteLine("Can Pause and Continue = " + _
                    sc.CanPauseAndContinue.ToString())
                Console.WriteLine("Can ShutDown = " + sc.CanShutdown.ToString())
                Console.WriteLine("Can Stop = " + sc.CanStop.ToString())
                If sc.Status = ServiceControllerStatus.Stopped Then
                    sc.Start()
                    While sc.Status = ServiceControllerStatus.Stopped
                        Thread.Sleep(1000)
                        sc.Refresh()
                    End While
                End If
                ' Issue custom commands to the service
                ' enum SimpleServiceCustomCommands 
                '    { StopWorker = 128, RestartWorker, CheckWorker };
                sc.ExecuteCommand(Fix(SimpleServiceCustomCommands.StopWorker))
                sc.ExecuteCommand(Fix(SimpleServiceCustomCommands.RestartWorker))
                sc.Pause()
                While sc.Status <> ServiceControllerStatus.Paused
                    Thread.Sleep(1000)
                    sc.Refresh()
                End While
                Console.WriteLine("Status = " + sc.Status.ToString())
                sc.Continue()
                While sc.Status = ServiceControllerStatus.Paused
                    Thread.Sleep(1000)
                    sc.Refresh()
                End While
                Console.WriteLine("Status = " + sc.Status.ToString())
                sc.Stop()
                While sc.Status <> ServiceControllerStatus.Stopped
                    Thread.Sleep(1000)
                    sc.Refresh()
                End While
                Console.WriteLine("Status = " + sc.Status.ToString())
                Dim argArray() As String = {"ServiceController arg1", "ServiceController arg2"}
                sc.Start(argArray)
                While sc.Status = ServiceControllerStatus.Stopped
                    Thread.Sleep(1000)
                    sc.Refresh()
                End While
                Console.WriteLine("Status = " + sc.Status.ToString())
                ' Display the event log entries for the custom commands
                ' and the start arguments.
                Dim el As New EventLog("Application")
                Dim elec As EventLogEntryCollection = el.Entries
                Dim ele As EventLogEntry
                For Each ele In elec
                    If ele.Source.IndexOf("SimpleService.OnCustomCommand") >= 0 Or ele.Source.IndexOf("SimpleService.Arguments") >= 0 Then
                        Console.WriteLine(ele.Message)
                    End If
                Next ele
            End If
        Next scTemp

    End Sub
End Class
' This sample displays the following output if the Simple Service
' sample is running:
'Status = Running
'Can Pause and Continue = True
'Can ShutDown = True
'Can Stop = True
'Status = Paused
'Status = Running
'Status = Stopped
'Status = Running
'4:14:49 PM - Custom command received: 128
'4:14:49 PM - Custom command received: 129
'ServiceController arg1
'ServiceController arg2

Poznámky

Pomocí třídy se ServiceController můžete připojit k existujícím službám a řídit jejich chování. Při vytváření instance ServiceController třídy nastavíte její vlastnosti tak, aby interagovala s konkrétní službou systému Windows. Pak můžete použít třídu ke spuštění, zastavení a jiné manipulaci se službou.

Komponentu ServiceController s největší pravděpodobností použijete v kapacitě pro správu. Můžete například vytvořit windows nebo webovou aplikaci, která prostřednictvím ServiceController instance odesílá vlastní příkazy do služby. To by bylo užitečné, protože modul snap-in Správce řízení služeb (SCM) Microsoft Konzola pro správu nepodporuje vlastní příkazy.

Po vytvoření instance ServiceControllernástroje je nutné u ní nastavit dvě vlastnosti, které identifikují službu, se kterou interaguje: název počítače a název služby, kterou chcete ovládat.

Poznámka

Ve výchozím nastavení MachineName je nastavena na místní počítač, takže ji nemusíte měnit, pokud nechcete nastavit instanci tak, aby odkazoval na jiný počítač.

Obecně platí, že autor služby napíše kód, který přizpůsobí akci přidruženou ke konkrétnímu příkazu. Služba může například obsahovat kód pro odpověď na ServiceBase.OnPause příkaz. V takovém případě se vlastní zpracování úlohy Pause spustí před tím, než systém službu pozastaví.

Sada příkazů, které služba může zpracovat, závisí na jejích vlastnostech. Můžete například nastavit CanStop vlastnost služby na falsehodnotu . Toto nastavení vykreslí Stop příkaz pro konkrétní službu jako nedostupný. Zabrání vám v zastavení služby v SCM zakázáním potřebného tlačítka. Pokud se pokusíte zastavit službu z kódu, systém vyvolá chybu a zobrazí chybovou zprávu "Zastavení se servicenamenezdařilo."

Konstruktory

ServiceController()

Inicializuje novou instanci ServiceController třídy, která není přidružena ke konkrétní službě.

ServiceController(String)

Inicializuje novou instanci ServiceController třídy, která je přidružena k existující službě v místním počítači.

ServiceController(String, String)

Inicializuje novou instanci ServiceController třídy, která je přidružena k existující službě v zadaném počítači.

Vlastnosti

CanPauseAndContinue

Získá hodnotu označující, zda lze službu pozastavit a obnovit.

CanRaiseEvents

Získá hodnotu označující, zda komponenta může vyvolat událost.

(Zděděno od Component)
CanShutdown

Získá hodnotu označující, zda má být služba upozorněna při vypnutí systému.

CanStop

Získá hodnotu označující, zda lze službu po spuštění zastavit.

Container

Získá objekt IContainer , který obsahuje Component.

(Zděděno od Component)
DependentServices

Získá sadu služeb, které závisí na službě přidružené k této ServiceController instanci.

DesignMode

Získá hodnotu, která označuje, zda je aktuálně v režimu návrhu Component .

(Zděděno od Component)
DisplayName

Získá nebo nastaví popisný název služby.

Events

Získá seznam obslužných rutin událostí, které jsou připojeny k tomuto Component.

(Zděděno od Component)
MachineName

Získá nebo nastaví název počítače, ve kterém se nachází tato služba.

ServiceHandle

Získá popisovač pro službu.

ServiceName

Získá nebo nastaví název, který identifikuje službu, na kterou tato instance odkazuje.

ServicesDependedOn

Sada služeb, na které tato služba závisí.

ServiceType

Získá typ služby, na kterou odkazuje tento objekt.

Site

Získá nebo nastaví ISite z Component.

(Zděděno od Component)
StartType

Získá hodnotu, která označuje způsob spuštění služby reprezentované objektem ServiceController .

Status

Získá stav služby, na kterou odkazuje tato instance.

Metody

Close()

Odpojí tuto ServiceController instanci od služby a uvolní všechny prostředky, které instance přidělila.

Continue()

Pokračuje v pozastavené službě.

CreateObjRef(Type)

Vytvoří objekt, který obsahuje všechny relevantní informace potřebné k vygenerování proxy sloužící ke komunikaci se vzdáleným objektem.

(Zděděno od MarshalByRefObject)
Dispose()

Provede aplikací definované úlohy spojené s uvolněním nebo resetováním nespravovaných prostředků.

Dispose()

Uvolní všechny prostředky používané nástrojem Component.

(Zděděno od Component)
Dispose(Boolean)

Uvolní nespravované prostředky používané nástrojem ServiceController a volitelně uvolní spravované prostředky.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
ExecuteCommand(Int32)

Spustí ve službě vlastní příkaz.

GetDevices()

Načte služby ovladače zařízení v místním počítači.

GetDevices(String)

Načte služby ovladače zařízení v zadaném počítači.

GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetLifetimeService()
Zastaralé.

Načte aktuální životnost objektu služby, který řídí zásady životnosti pro tuto instanci.

(Zděděno od MarshalByRefObject)
GetService(Type)

Vrátí objekt, který představuje službu poskytovanou objektem Component nebo .Container

(Zděděno od Component)
GetServices()

Načte všechny služby v místním počítači s výjimkou služeb ovladače zařízení.

GetServices(String)

Načte všechny služby v zadaném počítači s výjimkou služeb ovladače zařízení.

GetType()

Type Získá z aktuální instance.

(Zděděno od Object)
InitializeLifetimeService()
Zastaralé.

Získá životnost objektu služby, který řídí zásady životnosti pro tuto instanci.

(Zděděno od MarshalByRefObject)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
MemberwiseClone(Boolean)

Vytvoří mělkou kopii aktuálního MarshalByRefObject objektu.

(Zděděno od MarshalByRefObject)
Pause()

Pozastaví operaci služby.

Refresh()

Aktualizuje hodnoty vlastností resetováním vlastností na jejich aktuální hodnoty.

Start()

Spustí službu a nepředá žádné argumenty.

Start(String[])

Spustí službu předáním zadaných argumentů.

Stop()

Zastaví tuto službu a všechny služby, které jsou na této službě závislé.

Stop(Boolean)

Zastaví službu a volitelně všechny služby, které jsou na této službě závislé.

ToString()

String Vrátí hodnotu obsahující název , Componentpokud existuje. Tato metoda by neměla být přepsána.

(Zděděno od Component)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
WaitForStatus(ServiceControllerStatus)

Nekonečně čeká, až služba dosáhne zadaného stavu.

WaitForStatus(ServiceControllerStatus, TimeSpan)

Čeká na dosažení zadaného stavu služby nebo vypršení zadaného časového limitu.

Událost

Disposed

Vyvolá se, když je komponenta uvolněna voláním Dispose() metody .

(Zděděno od Component)

Platí pro

Viz také