Condividi tramite


ServiceController Classe

Definizione

Rappresenta un servizio Windows e consente di connettersi a un servizio in esecuzione o arrestato, modificarlo o ottenere informazioni su di esso.

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
Ereditarietà
ServiceController
Ereditarietà
ServiceController
Attributi
Implementazioni

Esempio

Nell'esempio seguente viene illustrato l'uso della classe per controllare l'esempio del ServiceControllerSimpleService servizio.

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

Commenti

È possibile usare la ServiceController classe per connettersi e controllare il comportamento dei servizi esistenti. Quando si crea un'istanza della ServiceController classe , si impostano le relative proprietà in modo che interagisca con un servizio Windows specifico. È quindi possibile usare la classe per avviare, arrestare e modificare in altro modo il servizio.

Probabilmente si userà il ServiceController componente in una capacità amministrativa. Ad esempio, è possibile creare un'applicazione Windows o Web che invia comandi personalizzati a un servizio tramite l'istanza ServiceController di . Ciò sarebbe utile perché lo snap-in Gestione controllo dei servizi (SCM) di Microsoft Management Console non supporta i comandi personalizzati.

Dopo aver creato un'istanza di , è necessario impostare due proprietà su di ServiceControlleressa per identificare il servizio con cui interagisce: il nome del computer e il nome del servizio che si desidera controllare.

Annotazioni

Per impostazione predefinita, MachineName è impostato sul computer locale, pertanto non è necessario modificarlo a meno che non si voglia impostare l'istanza in modo che punti a un altro computer.

In genere, l'autore del servizio scrive codice che personalizza l'azione associata a un comando specifico. Ad esempio, un servizio può contenere codice per rispondere a un ServiceBase.OnPause comando. In tal caso, l'elaborazione personalizzata per l'attività Pause viene eseguita prima che il sistema sospende il servizio.

Il set di comandi che un servizio può elaborare dipende dalle relative proprietà; Ad esempio, è possibile impostare la CanStop proprietà per un servizio su false. Questa impostazione rende il Stop comando non disponibile in quel particolare servizio. Impedisce l'arresto del servizio da Gestione controllo servizi disabilitando il pulsante necessario. Se si tenta di arrestare il servizio dal codice, il sistema genera un errore e visualizza il messaggio di errore "Failed to stop servicename".

Costruttori

Nome Descrizione
ServiceController()

Inizializza una nuova istanza della ServiceController classe che non è associata a un servizio specifico.

ServiceController(String, String)

Inizializza una nuova istanza della ServiceController classe associata a un servizio esistente nel computer specificato.

ServiceController(String)

Inizializza una nuova istanza della ServiceController classe associata a un servizio esistente nel computer locale.

Proprietà

Nome Descrizione
CanPauseAndContinue

Ottiene un valore che indica se il servizio può essere sospeso e ripreso.

CanRaiseEvents

Ottiene un valore che indica se il componente può generare un evento.

(Ereditato da Component)
CanShutdown

Ottiene un valore che indica se il servizio deve ricevere una notifica quando il sistema viene arrestato.

CanStop

Ottiene un valore che indica se il servizio può essere arrestato dopo l'avvio.

Container

Ottiene l'oggetto IContainer contenente l'oggetto Component.

(Ereditato da Component)
DependentServices

Ottiene il set di servizi che dipendono dal servizio associato a questa ServiceController istanza.

DesignMode

Ottiene un valore che indica se è Component attualmente in modalità progettazione.

(Ereditato da Component)
DisplayName

Ottiene o imposta un nome descrittivo per il servizio.

Events

Ottiene l'elenco dei gestori eventi associati a questo Componentoggetto .

(Ereditato da Component)
MachineName

Ottiene o imposta il nome del computer in cui risiede il servizio.

ServiceHandle

Ottiene l'handle per il servizio.

ServiceName

Ottiene o imposta il nome che identifica il servizio a cui fa riferimento questa istanza.

ServicesDependedOn

Set di servizi da cui dipende questo servizio.

ServiceType

Ottiene il tipo di servizio a cui fa riferimento questo oggetto.

Site

Ottiene o imposta l'oggetto ISite dell'oggetto Component.

(Ereditato da Component)
StartType

Ottiene un valore che indica la modalità di avvio del servizio rappresentato dall'oggetto ServiceController .

Status

Ottiene lo stato del servizio a cui fa riferimento questa istanza.

Metodi

Nome Descrizione
Close()

Disconnette questa ServiceController istanza dal servizio e libera tutte le risorse allocate dall'istanza.

Continue()

Continua un servizio dopo che è stato sospeso.

CreateObjRef(Type)

Crea un oggetto che contiene tutte le informazioni pertinenti necessarie per generare un proxy utilizzato per comunicare con un oggetto remoto.

(Ereditato da MarshalByRefObject)
Dispose()

Esegue attività definite dall'applicazione associate alla liberazione, al rilascio o alla reimpostazione di risorse non gestite.

Dispose()

Rilascia tutte le risorse usate da Component.

(Ereditato da Component)
Dispose(Boolean)

Rilascia le risorse non gestite usate da ServiceController e, facoltativamente, rilascia le risorse gestite.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
ExecuteCommand(Int32)

Esegue un comando personalizzato nel servizio.

GetDevices()

Recupera i servizi driver di dispositivo nel computer locale.

GetDevices(String)

Recupera i servizi driver di dispositivo nel computer specificato.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetLifetimeService()
Obsoleti.

Recupera l'oggetto servizio di durata corrente che controlla i criteri di durata per questa istanza.

(Ereditato da MarshalByRefObject)
GetService(Type)

Restituisce un oggetto che rappresenta un servizio fornito da Component o da Container.

(Ereditato da Component)
GetServices()

Recupera tutti i servizi nel computer locale, ad eccezione dei servizi driver di dispositivo.

GetServices(String)

Recupera tutti i servizi nel computer specificato, ad eccezione dei servizi driver di dispositivo.

GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
InitializeLifetimeService()
Obsoleti.

Ottiene un oggetto servizio di durata per controllare i criteri di durata per questa istanza.

(Ereditato da MarshalByRefObject)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
MemberwiseClone(Boolean)

Crea una copia superficiale dell'oggetto corrente MarshalByRefObject .

(Ereditato da MarshalByRefObject)
Pause()

Sospende l'operazione di un servizio.

Refresh()

Aggiorna i valori delle proprietà reimpostando le proprietà sui valori correnti.

Start()

Avvia il servizio, passando nessun argomento.

Start(String[])

Avvia un servizio passando gli argomenti specificati.

Stop()

Arresta questo servizio e tutti i servizi dipendenti da questo servizio.

Stop(Boolean)

Arresta il servizio e, facoltativamente, tutti i servizi dipendenti da questo servizio.

ToString()

Restituisce un oggetto String contenente il nome dell'oggetto Component, se presente. Questo metodo non deve essere sottoposto a override.

(Ereditato da Component)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)
WaitForStatus(ServiceControllerStatus, TimeSpan)

Attende che il servizio raggiunga lo stato specificato o che scada il timeout specificato.

WaitForStatus(ServiceControllerStatus)

Attende infinitamente che il servizio raggiunga lo stato specificato.

Eventi

Nome Descrizione
Disposed

Si verifica quando il componente viene eliminato da una chiamata al Dispose() metodo .

(Ereditato da Component)

Si applica a

Vedi anche