ServiceController Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à
- 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) |