vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB.NET01.03.07
Dienst starten, anhalten, fortsetzen (VB.NET)

Über die ServiceController-Klasse lässt sich unter VB.NET ein Dienst mit wenig Code-Aufwand starten, anhalten, fortsetzen etc...

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  1.562 
http://www.tools4vb.de/System:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt 

Wie man eine Liste aller installierter Dienste erhält, haben wir Ihnen bereits gezeigt:
 Liste aller Dienste ermitteln (VB.NET)

In unserem heutigen Extratipp zeigen wir Ihnen, wie man installierte Dienste neu starten, anhalten und wieder fortsetzen kann. Auch dieses Mal verwenden wir wieder die ServiceController-Klasse aus dem Namensraum "System.ServiceProcess" zurückgreifen. Die entsprechende DLL muss jedoch zunächst über "Projekt - Verweise" dem Projekt hinzugefügt werden.

Nachfolgend vier Funktionen, um einen Dienst zu starten, anzuhalten, fortzusetzen und zu stoppen. Die jeweiligen Funktionen erwarten im ersten Parameter den Namen des Dienstes. Optional kann noch eine TimeOut-Zeit in Sekunden angegeben werden. Der Rückgabewert der Funktionen entspricht den Status des Dienstes.

Imports System.ServiceProcess
...
' Dienst starten
Public Function StartService(ByVal sName As String, _
  Optional ByVal nWaitSek As Integer = 2) As ServiceControllerStatus
 
  Dim nState As ServiceControllerStatus = ServiceControllerStatus.Stopped
 
  ' Dienst-Objekt erstellen
  Me.Cursor = Cursors.WaitCursor
  Try
    Dim oService As ServiceController = New ServiceController(sName)
    ' Dienst starten, falls nicht bereits geschehen
    With oService
      nState = .Status
      If .Status <> ServiceControllerStatus.Running Then
        .Start()
 
        ' Auf gewünschten Status warten...
        .WaitForStatus(ServiceControllerStatus.Running, _
          New TimeSpan(0, 0, nWaitSek))
      End If
      nState = .Status
    End With
  Catch ex As Exception
    ' Dienst nicht gefunden / Fehler
    MsgBox("Fehler beim Starten des Dienstes!" & _
      vbCrLf & ex.Message.ToString)
  End Try
  Me.Cursor = Cursors.Default
 
  Return nState
End Function
' Dienst stoppen
Public Function StopService(ByVal sName As String, _
  Optional ByVal nWaitSek As Integer = 2) As ServiceControllerStatus
 
  Dim nState As ServiceControllerStatus = ServiceControllerStatus.Stopped
 
  ' Dienst-Objekt erstellen
  Me.Cursor = Cursors.WaitCursor
  Try
    Dim oService As ServiceController = New ServiceController(sName)
 
    ' Dienst stoppen, falls nicht bereits geschehen
    With oService
      nState = .Status
      If .Status <> ServiceControllerStatus.Stopped Then
        .Stop()
 
        ' Auf gewünschten Status warten...
        .WaitForStatus(ServiceControllerStatus.Stopped, _
          New TimeSpan(0, 0, nWaitSek))
      End If
      nState = .Status
    End With
  Catch ex As Exception
    ' Dienst nicht gefunden / Fehler
    MsgBox("Fehler beim Stoppen des Dienstes!" & _
      vbCrLf & ex.Message.ToString)
  End Try
  Me.Cursor = Cursors.Default
 
  Return nState
End Function
' Dienst anhalten
Public Function PauseService(ByVal sName As String, _
  Optional ByVal nWaitSek As Integer = 2) As ServiceControllerStatus
 
  Dim nState As ServiceControllerStatus = ServiceControllerStatus.Stopped
 
  ' Dienst-Objekt erstellen
  Me.Cursor = Cursors.WaitCursor
  Try
    Dim oService As ServiceController = New ServiceController(sName)
 
    ' Dienst anhalten, falls nicht bereits geschehen
    With oService
      nState = .Status
      If .Status <> ServiceControllerStatus.Paused And _
        .Status <> ServiceControllerStatus.Stopped Then
 
        .Pause()
 
        ' Auf gewünschten Status warten...
        .WaitForStatus(ServiceControllerStatus.Paused, _
          New TimeSpan(0, 0, nWaitSek))
      End If
      nState = .Status
    End With
  Catch ex As Exception
    ' Dienst nicht gefunden / Fehler
    MsgBox("Fehler beim Anhalten des Dienstes!" & _
      vbCrLf & ex.Message.ToString)
  End Try
  Me.Cursor = Cursors.Default
 
  Return nState
End Function
' Dienst fortsetzen
Public Function ContinueService(ByVal sName As String, _
  Optional ByVal nWaitSek As Integer = 2) As ServiceControllerStatus
 
  Dim nState As ServiceControllerStatus = ServiceControllerStatus.Stopped
 
  ' Dienst-Objekt erstellen
  Me.Cursor = Cursors.WaitCursor
  Try
    Dim oService As ServiceController = New ServiceController(sName)
 
    ' Dienst fortsetzen, falls nicht bereits geschehen
    With oService
      nState = .Status
      If .Status = ServiceControllerStatus.Paused Then
        .Continue()
 
        ' Auf gewünschten Status warten...
        .WaitForStatus(ServiceControllerStatus.Running, _
          New TimeSpan(0, 0, nWaitSek))
      End If
      nState = .Status
    End With
  Catch ex As Exception
    ' Dienst nicht gefunden / Fehler
    MsgBox("Fehler beim Fortsetzen des Dienstes!" & _
      vbCrLf & ex.Message.ToString)
  End Try
  Me.Cursor = Cursors.Default
 
  Return nState
End Function