ServiceBase.OnCustomCommand-Methode
Bei der Implementierung in einer abgeleiteten Klasse wird OnCustomCommand ausgeführt, wenn der Dienststeuerungs-Manager einen benutzerdefinierten Befehl an den Dienst übergibt. Gibt an, welche Aktionen auszuführen sind, wenn ein Befehl mit dem angegebenen Parameter auftritt.
Namespace: System.ServiceProcess
Assembly: System.ServiceProcess (in system.serviceprocess.dll)
Syntax
'Declaration
Protected Overridable Sub OnCustomCommand ( _
command As Integer _
)
'Usage
Dim command As Integer
Me.OnCustomCommand(command)
protected virtual void OnCustomCommand (
int command
)
protected:
virtual void OnCustomCommand (
int command
)
protected void OnCustomCommand (
int command
)
protected function OnCustomCommand (
command : int
)
Parameter
- command
Die an den Dienst gesendete Befehlsnachricht.
Hinweise
Mit OnCustomCommand können Sie weitere Funktionen angeben, die über das Starten, Beenden, Anhalten und Wiederaufnehmen von Diensten hinausgehen.
Der Dienststeuerungs-Manager überprüft den benutzerdefinierten Befehl nicht daraufhin, ob der Dienst den übergebenen command-Parameter unterstützt. Er übergibt den benutzerdefinierten Befehl direkt an den Dienst. Wenn der Dienst den command-Parameter nicht erkennt, werden keine Aktionen ausgeführt.
Benutzerdefinierte Befehle werden durch eine ExecuteCommand-Anweisung in einer ServiceController-Komponente ausgelöst. Lassen Sie die für den Dienst definierten benutzerdefinierten Befehle mit einer switch-Anweisung oder einer if-then-Bedingung verarbeiten.
Sie können für einen benutzerdefinierten Befehl nur Werte zwischen 128 und 256 in der Anwendung definieren oder in OnCustomCommand verwenden. Ganze Zahlen unter 128 entsprechen den für das System reservierten Werten.
Wenn die AutoLog-Eigenschaft auf true festgelegt ist, schreiben benutzerdefinierte Befehle, wie alle anderen Befehle auch, Einträge in das Ereignisprotokoll, aus denen hervorgeht, ob die Methode erfolgreich ausgeführt wurde oder nicht.
Beispiel
Im folgenden Beispiel wird eine Implementierung der OnCustomCommand-Methode für eine von ServiceBase abgeleitete Dienstklasse veranschaulicht. Dieses Codebeispiel ist Teil eines umfangreicheren Beispiels für die ServiceBase-Klasse.
' Handle a custom command.
Protected Overrides Sub OnCustomCommand(ByVal command As Integer)
#If LOGEVENTS Then
System.Diagnostics.EventLog.WriteEntry("SimpleService.OnCustomCommand", DateTime.Now.ToLongTimeString() + _
" - Custom command received: " + command.ToString())
#End If
' If the custom command is recognized,
' signal the worker thread appropriately.
Select Case command
Case Fix(SimpleServiceCustomCommands.StopWorker)
' Signal the worker thread to terminate.
' For this custom command, the main service
' continues to run without a worker thread.
OnStop()
Case Fix(SimpleServiceCustomCommands.RestartWorker)
' Restart the worker thread if necessary.
OnStart(Nothing)
Case Fix(SimpleServiceCustomCommands.CheckWorker)
#If LOGEVENTS Then
' Log the current worker thread state.
System.Diagnostics.EventLog.WriteEntry("SimpleService.OnCustomCommand", _
DateTime.Now.ToLongTimeString() + _
" OnCustomCommand - Worker thread state = " + _
workerThread.ThreadState.ToString())
#End If
Case Else
#If LOGEVENTS Then
System.Diagnostics.EventLog.WriteEntry("SimpleService.OnCustomCommand", _
DateTime.Now.ToLongTimeString())
#End If
End Select
End Sub 'OnCustomCommand
// Handle a custom command.
protected override void OnCustomCommand(int command)
{
#if LOGEVENTS
EventLog.WriteEntry("SimpleService.OnCustomCommand", DateTime.Now.ToLongTimeString() +
" - Custom command received: " +
command.ToString());
#endif
// If the custom command is recognized,
// signal the worker thread appropriately.
switch (command)
{
case (int)SimpleServiceCustomCommands.StopWorker:
// Signal the worker thread to terminate.
// For this custom command, the main service
// continues to run without a worker thread.
OnStop();
break;
case (int)SimpleServiceCustomCommands.RestartWorker:
// Restart the worker thread if necessary.
OnStart(null);
break;
case (int)SimpleServiceCustomCommands.CheckWorker:
#if LOGEVENTS
// Log the current worker thread state.
EventLog.WriteEntry("SimpleService.OnCustomCommand", DateTime.Now.ToLongTimeString() +
" OnCustomCommand - Worker thread state = " +
workerThread.ThreadState.ToString());
#endif
break;
default:
#if LOGEVENTS
EventLog.WriteEntry("SimpleService.OnCustomCommand",
DateTime.Now.ToLongTimeString());
#endif
break;
}
}
// Handle a custom command.
protected:
virtual void OnCustomCommand( int command ) override
{
Trace::WriteLine( DateTime::Now.ToLongTimeString() + " - Custom command received: " + command, "OnCustomCommand" );
// If the custom command is recognized,
// signal the worker thread appropriately.
switch ( command )
{
case (int)SimpleServiceCustomCommands::StopWorker:
// Signal the worker thread to terminate.
// For this custom command, the main service
// continues to run without a worker thread.
OnStop();
break;
case (int)SimpleServiceCustomCommands::RestartWorker:
// Restart the worker thread if necessary.
OnStart( nullptr );
break;
case (int)SimpleServiceCustomCommands::CheckWorker:
// Log the current worker thread state.
Trace::WriteLine( DateTime::Now.ToLongTimeString() + " - Worker thread state = " + workerThread->ThreadState.ToString(), "OnCustomCommand" );
break;
default:
Trace::WriteLine( DateTime::Now.ToLongTimeString() + " - Unrecognized custom command ignored!", "OnCustomCommand" );
break;
}
}
.NET Framework-Sicherheit
- Volle Vertrauenswürdigkeit für den unmittelbaren Aufrufer. Dieser Member kann von nur teilweise vertrauenswürdigem Code nicht verwendet werden. Weitere Informationen finden Sie unter .
Plattformen
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
Siehe auch
Referenz
ServiceBase-Klasse
ServiceBase-Member
System.ServiceProcess-Namespace
OnContinue
OnPause
OnPowerEvent
OnShutdown
OnStart
OnStop