Udostępnij za pośrednictwem


ServiceController Klasa

Definicja

Reprezentuje usługę systemu Windows i umożliwia nawiązywanie połączenia z uruchomioną lub zatrzymaną usługą, manipulowanie nią lub uzyskiwanie informacji o niej.

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
Dziedziczenie
ServiceController
Dziedziczenie
ServiceController
Atrybuty
Implementuje

Przykłady

W poniższym przykładzie pokazano użycie klasy ServiceController do kontrolowania przykładu usługi SimpleService.

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

Uwagi

Możesz użyć klasy ServiceController, aby nawiązać połączenie z istniejącymi usługami i kontrolować ich zachowanie. Podczas tworzenia wystąpienia klasy ServiceController należy ustawić jego właściwości tak, aby współdziałała z określoną usługą systemu Windows. Następnie możesz użyć klasy , aby uruchomić, zatrzymać i w inny sposób manipulować usługą.

Najprawdopodobniej użyjesz składnika ServiceController w pojemności administracyjnej. Można na przykład utworzyć aplikację systemu Windows lub internetową, która wysyła polecenia niestandardowe do usługi za pośrednictwem wystąpienia ServiceController. Byłoby to przydatne, ponieważ przystawka programu Microsoft Management Console programu Service Control Manager (SCM) nie obsługuje poleceń niestandardowych.

Po utworzeniu wystąpienia ServiceControllernależy ustawić na nim dwie właściwości, aby zidentyfikować usługę, z którą współdziała: nazwę komputera i nazwę usługi, którą chcesz kontrolować.

Nuta

Domyślnie MachineName jest ustawiona na komputer lokalny, więc nie trzeba go zmieniać, chyba że chcesz ustawić wystąpienie, aby wskazywało inny komputer.

Ogólnie rzecz biorąc, autor usługi pisze kod, który dostosowuje akcję skojarzona z określonym poleceniem. Na przykład usługa może zawierać kod odpowiadający ServiceBase.OnPause polecenia. W takim przypadku niestandardowe przetwarzanie dla zadania Pause jest uruchamiane przed wstrzymaniem usługi przez system.

Zestaw poleceń, które usługa może przetwarzać, zależy od jego właściwości; na przykład można ustawić właściwość CanStop dla usługi na wartość false. To ustawienie powoduje, że polecenie Stop jest niedostępne w tej konkretnej usłudze; uniemożliwia zatrzymanie usługi z poziomu SCM przez wyłączenie niezbędnego przycisku. Jeśli spróbujesz zatrzymać usługę z kodu, system zgłosi błąd i wyświetli komunikat o błędzie "Nie można zatrzymać servicename".

Konstruktory

ServiceController()

Inicjuje nowe wystąpienie klasy ServiceController, która nie jest skojarzona z określoną usługą.

ServiceController(String, String)

Inicjuje nowe wystąpienie klasy ServiceController skojarzonej z istniejącą usługą na określonym komputerze.

ServiceController(String)

Inicjuje nowe wystąpienie klasy ServiceController skojarzonej z istniejącą usługą na komputerze lokalnym.

Właściwości

CanPauseAndContinue

Pobiera wartość wskazującą, czy można wstrzymać i wznowić usługę.

CanRaiseEvents

Pobiera wartość wskazującą, czy składnik może zgłosić zdarzenie.

(Odziedziczone po Component)
CanShutdown

Pobiera wartość wskazującą, czy usługa powinna być powiadamiana o zamknięciu systemu.

CanStop

Pobiera wartość wskazującą, czy można zatrzymać usługę po jej uruchomieniu.

Container

Pobiera IContainer, który zawiera Component.

(Odziedziczone po Component)
DependentServices

Pobiera zestaw usług, które zależą od usługi skojarzonej z tym wystąpieniem ServiceController.

DesignMode

Pobiera wartość wskazującą, czy Component jest obecnie w trybie projektowania.

(Odziedziczone po Component)
DisplayName

Pobiera lub ustawia przyjazną nazwę usługi.

Events

Pobiera listę programów obsługi zdarzeń dołączonych do tej Component.

(Odziedziczone po Component)
MachineName

Pobiera lub ustawia nazwę komputera, na którym znajduje się ta usługa.

ServiceHandle

Pobiera dojście dla usługi.

ServiceName

Pobiera lub ustawia nazwę identyfikującą usługę, do którego odwołuje się to wystąpienie.

ServicesDependedOn

Zestaw usług, od których zależy ta usługa.

ServiceType

Pobiera typ usługi, do którego odwołuje się ten obiekt.

Site

Pobiera lub ustawia ISiteComponent.

(Odziedziczone po Component)
StartType

Pobiera wartość wskazującą sposób uruchamiania usługi reprezentowanej przez obiekt ServiceController.

Status

Pobiera stan usługi, do którego odwołuje się to wystąpienie.

Metody

Close()

Odłącza to wystąpienie ServiceController od usługi i zwalnia wszystkie przydzielone zasoby.

Continue()

Kontynuuje usługę po jej wstrzymaniu.

CreateObjRef(Type)

Tworzy obiekt zawierający wszystkie istotne informacje wymagane do wygenerowania serwera proxy używanego do komunikowania się z obiektem zdalnym.

(Odziedziczone po MarshalByRefObject)
Dispose()

Wykonuje zadania zdefiniowane przez aplikację skojarzone z zwalnianiem, wydawaniem lub resetowaniem niezarządzanych zasobów.

Dispose()

Zwalnia wszystkie zasoby używane przez Component.

(Odziedziczone po Component)
Dispose(Boolean)

Zwalnia niezarządzane zasoby używane przez ServiceController i opcjonalnie zwalnia zarządzane zasoby.

Equals(Object)

Określa, czy określony obiekt jest równy bieżącemu obiektowi.

(Odziedziczone po Object)
ExecuteCommand(Int32)

Wykonuje polecenie niestandardowe w usłudze.

GetDevices()

Pobiera usługi sterowników urządzeń na komputerze lokalnym.

GetDevices(String)

Pobiera usługi sterowników urządzeń na określonym komputerze.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetLifetimeService()
Przestarzałe.

Pobiera bieżący obiekt usługi okresu istnienia, który kontroluje zasady okresu istnienia dla tego wystąpienia.

(Odziedziczone po MarshalByRefObject)
GetService(Type)

Zwraca obiekt reprezentujący usługę dostarczaną przez Component lub Container.

(Odziedziczone po Component)
GetServices()

Pobiera wszystkie usługi na komputerze lokalnym, z wyjątkiem usług sterowników urządzeń.

GetServices(String)

Pobiera wszystkie usługi na określonym komputerze z wyjątkiem usług sterowników urządzeń.

GetType()

Pobiera Type bieżącego wystąpienia.

(Odziedziczone po Object)
InitializeLifetimeService()
Przestarzałe.

Uzyskuje obiekt usługi okresu istnienia w celu kontrolowania zasad okresu istnienia dla tego wystąpienia.

(Odziedziczone po MarshalByRefObject)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Object.

(Odziedziczone po Object)
MemberwiseClone(Boolean)

Tworzy płytkią kopię bieżącego obiektu MarshalByRefObject.

(Odziedziczone po MarshalByRefObject)
Pause()

Zawiesza operację usługi.

Refresh()

Odświeża wartości właściwości, resetując właściwości do ich bieżących wartości.

Start()

Uruchamia usługę, przekazując bez argumentów.

Start(String[])

Uruchamia usługę, przekazując określone argumenty.

Stop()

Zatrzymuje tę usługę i wszystkie usługi zależne od tej usługi.

Stop(Boolean)

Zatrzymuje usługę i opcjonalnie wszystkie usługi zależne od tej usługi.

ToString()

Zwraca String zawierającą nazwę Component, jeśli istnieje. Ta metoda nie powinna być zastępowana.

(Odziedziczone po Component)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)
WaitForStatus(ServiceControllerStatus, TimeSpan)

Czeka na osiągnięcie określonego stanu usługi lub wygaśnięcie określonego limitu czasu.

WaitForStatus(ServiceControllerStatus)

Nieskończenie czeka na osiągnięcie określonego stanu przez usługę.

Zdarzenia

Disposed

Występuje, gdy składnik jest usuwany przez wywołanie metody Dispose().

(Odziedziczone po Component)

Dotyczy

Zobacz też