Freigeben über


ServiceBase.OnStart-Methode

Wird bei der Implementierung in einer abgeleiteten Klasse ausgeführt, wenn der Dienststeuerungs-Manager einen Befehl zum Starten an den Dienst sendet oder wenn das Betriebssystem gestartet wird (diese gilt für Dienste, die automatisch gestartet werden). Gibt Aktionen an, die beim Starten des Diensts ausgeführt werden müssen.

Namespace: System.ServiceProcess
Assembly: System.ServiceProcess (in system.serviceprocess.dll)

Syntax

'Declaration
Protected Overridable Sub OnStart ( _
    args As String() _
)
'Usage
Dim args As String()

Me.OnStart(args)
protected virtual void OnStart (
    string[] args
)
protected:
virtual void OnStart (
    array<String^>^ args
)
protected void OnStart (
    String[] args
)
protected function OnStart (
    args : String[]
)

Parameter

  • args
    Vom Befehl zum Starten übergebene Daten.

Hinweise

Geben Sie mit OnStart die Verarbeitung an, die ausgeführt wird, wenn der Dienst einen Befehl zum Starten empfängt. OnStart ist die Methode, in der das Verhalten des Diensts festgelegt wird. OnStart kann für die Übergabe von Daten Argumente enthalten, dies ist jedoch selten.

Warnung

Führen Sie mit dem Konstruktor keine Verarbeitungsvorgänge aus, die in OnStart erfolgen müssen. Behandeln Sie mit OnStart die gesamte Initialisierung des Diensts. Der Konstruktor wird bei der Ausführung der ausführbaren Anwendungsdatei und nicht bei der Ausführung des Diensts aufgerufen. Die ausführbare Datei wird vor OnStart ausgeführt. Beim Fortsetzen wird der Konstruktor z. B. nicht erneut aufgerufen, da das Objekt durch den Dienststeuerungs-Manager bereits im Speicher enthalten ist. Wenn OnStop Ressourcen freigibt, die im Konstruktor und nicht in OnStart reserviert sind, werden die benötigten Ressourcen bei einem zweiten Aufruf des Diensts nicht erneut erstellt.

Für Dienste kann festgelegt werden, dass sie bei einem Neustart des Computers gestartet werden, indem StartType im Installationsprogramm des Diensts festgelegt wird. In einer solchen Situation wird OnStart beim Systemstart aufgerufen.

OnStart muss in der abgeleiteten Klasse überschrieben worden sein. Damit der Dienst sinnvoll angewendet werden kann, muss sowohl OnStart als auch OnStop in der Dienstklasse implementiert werden.

Beispiel

Im folgenden Beispiel wird eine Implementierung der OnStart-Methode für eine von ServiceBase abgeleitete Dienstklasse veranschaulicht. Dieses Codebeispiel ist Teil eines umfangreicheren Beispiels für die ServiceBase-Klasse.

    ' Start the service.
    Protected Overrides Sub OnStart(ByVal args() As String)
        Dim handle As IntPtr = Me.ServiceHandle
        myServiceStatus.currentState = Fix(State.SERVICE_START_PENDING)
        SetServiceStatus(handle, myServiceStatus)

        ' Start a separate thread that does the actual work.
        If workerThread Is Nothing OrElse (workerThread.ThreadState And System.Threading.ThreadState.Unstarted Or System.Threading.ThreadState.Stopped) <> 0 Then
#If LOGEVENTS Then
            System.Diagnostics.EventLog.WriteEntry("SimpleService.OnStart", DateTime.Now.ToLongTimeString() + _
                " - Starting the service worker thread.")
#End If

            workerThread = New Thread(New ThreadStart(AddressOf ServiceWorkerMethod))
            workerThread.Start()
        End If
        If Not (workerThread Is Nothing) Then
#If LOGEVENTS Then
            System.Diagnostics.EventLog.WriteEntry("SimpleService.OnStart", DateTime.Now.ToLongTimeString() + _
                " - Worker thread state = " + workerThread.ThreadState.ToString())
#End If
        End If
        myServiceStatus.currentState = Fix(State.SERVICE_RUNNING)
        SetServiceStatus(handle, myServiceStatus)

    End Sub 'OnStart
        // Start the service.
        protected override void OnStart(string[] args)
        {
            IntPtr handle = this.ServiceHandle;
            myServiceStatus.currentState = (int)State.SERVICE_START_PENDING;
            SetServiceStatus(handle, myServiceStatus);

            // Start a separate thread that does the actual work.

            if ((workerThread == null) ||
                ((workerThread.ThreadState &
                 (System.Threading.ThreadState.Unstarted | System.Threading.ThreadState.Stopped)) != 0))
            {
#if LOGEVENTS
                EventLog.WriteEntry("SimpleService.OnStart", DateTime.Now.ToLongTimeString() +
                    " - Starting the service worker thread.");
#endif

                workerThread = new Thread(new ThreadStart(ServiceWorkerMethod));
                workerThread.Start();
            }
            if (workerThread != null)
            {
#if LOGEVENTS
                EventLog.WriteEntry("SimpleService.OnStart", DateTime.Now.ToLongTimeString() +
                    " - Worker thread state = " +
                    workerThread.ThreadState.ToString());
#endif
            }
            myServiceStatus.currentState = (int)State.SERVICE_RUNNING;
            SetServiceStatus(handle, myServiceStatus);

        }
    // Start the service.
protected:
    virtual void OnStart( array<String^>^  ) override
    {
        // Start a separate thread that does the actual work.
        if ( (workerThread == nullptr) || ((workerThread->ThreadState & (System::Threading::ThreadState::Unstarted | System::Threading::ThreadState::Stopped)) != (System::Threading::ThreadState)0) )
        {
            Trace::WriteLine( DateTime::Now.ToLongTimeString() + " - Starting the service worker thread.", "OnStart" );
            workerThread = gcnew Thread( gcnew ThreadStart( this,&SimpleService::ServiceWorkerMethod ) );
            workerThread->Start();
        }

        if ( workerThread != nullptr )
        {
            Trace::WriteLine( DateTime::Now.ToLongTimeString() + " - Worker thread state = " + workerThread->ThreadState.ToString(), "OnStart" );
        }
    }

.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
OnStop
OnCustomCommand