Dienst Starten

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von xater.

    Dienst Starten

    Hallo ich habe folgendes Problem bei diesem Code, und hoffe jemand kann mir helfen

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Dim strItemCheck As String
    3. Dim objProcess As System.Diagnostics.Process
    4. Dim objDienst As ServiceController
    5. Dim blnFound As Boolean
    6. ' Durchläuft alle markierten Einträge
    7. For index As Integer = 0 To ListView1.CheckedItems.Count - 1
    8. ' Hilfsvariable für den Pfad
    9. Dim fullpath As String = ListView1.CheckedItems(index).Text
    10. ' Dateiname ohne Dateiendung (=ProcessName)
    11. Dim processname As String = IO.Path.GetFileNameWithoutExtension(fullpath)
    12. strItemCheck = ListView1.CheckedItems(index).Text
    13. If String.Compare(strItemCheck, "Prozess", False) = 0 Then
    14. ' Prüfen, ob Process mit dem aktuellen processname schon läuft
    15. For Each objProcess In System.Diagnostics.Process.GetProcesses
    16. blnFound = (String.Compare(strItemCheck, objProcess.ProcessName, False) = 0)
    17. If blnFound Then Exit For
    18. Next objProcess
    19. ' Versuche, Process zu starten
    20. If Not blnFound Then
    21. Try
    22. System.Diagnostics.Process.Start(fullpath)
    23. Catch ex As Exception
    24. ' MessageBox.Show(ex.Message)
    25. End Try
    26. End If ' Dienst
    27. ElseIf String.Compare(strItemCheck, "Dienst", False) = 0 Then
    28. ' Prüfen, ob Dienst mit dem aktuellen processname schon läuft
    29. For Each objDienst In
    30. blnFound = (String.Compare(strItemCheck, objDienst.ServiceName, False) = 0)
    31. If blnFound Then Exit For
    32. Next objDienst
    33. ' Versuche, Dienst zu starten
    34. If Not blnFound Then
    35. Try
    36. System.Diagnostics.Process.Start(fullpath)
    37. Catch ex As Exception
    38. ' MessageBox.Show(ex.Message)
    39. End Try
    40. End If
    41. End If
    42. Next index
    43. End Sub


    Die Probleme liegen an diesen beiden Zeilen

    VB.NET-Quellcode

    1. blnFound = (String.Compare(strItemCheck, objDienst.ServiceName, False) = 0)

    ServiceName ist nur ein Platzhalter für meinen fehlenden Member
    Wie gehört das richtig hat jemand eine Idee?

    Zweite Problem Zeile

    VB.NET-Quellcode

    1. System.Diagnostics.Process.Start(fullpath)


    Wie schreibt man das um einen Dienst zu starten ?

    Danke für eure Hilfe :)

    Ach ja vorher hab ich natürlich noch folgende Verweise gesetzt

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.ServiceProcess
    3. Imports System.Collections
    4. Imports System.Management
    Ja hatte ich ausprobiert
    Leider waren die Ergebnise alle voller Fehler.
    Da stimmten einige Member von SystemControl nicht überein mit der Library.

    Vil. kennt jemand ja eine Lösung und möchte sie mit dem Forum teilen

    Danke und Gruß
    Hallo,

    Ich sitze immer noch an dem Problem bin bisher nicht weiter gekommen.
    Es scheint echt schwer zu sein, einen Dienst zu starten wenn er noch nicht gestartet ist oder beendet wurde.

    oben mein Code kann mir da echt niemand helfen .

    Danke Danke

    und ein schönes We

    Gruß Björn
    Wenn alle Stricke reißen, könntest Du eine Batch-Datei erstellen, mit der man den Dienst starten kann. Dann kannst Du diese Datei ausführen lassen.

    Was genau bedeutet "Funktioniert nicht"? Hast Du Fehlermeldungen parat? Bedenke, dass man je nach Konfiguration Admin sein muss, um Dienste starten zu können.
    Natürlich verwendest du NT. Außerdem steht alles wunderbar auf der MSDN Seite dokumentiert.
    Öffne des Service Control Manager mit OpenSCManager() msdn.microsoft.com/en-us/library/ms684323%28v=vs.85%29.aspx
    Öffne den Service mit Hilfe des Managers mit OpenService() msdn.microsoft.com/en-us/library/ms684330%28v=vs.85%29.aspx
    Mit ControlService() kannst du nun alles steuern msdn.microsoft.com/en-us/library/ms682108%28v=vs.85%29.aspx
    Denk daran die Handles mit CloseServiceHandle() wieder zu schließen!
    pinvoke.net/ Hier findest du die dazugehörigen C#/VB Signaturen.
    Warum so kompliziert mit WMI oder der WinAPI??? .NET bietet dafür doch die "ServiceController"-Klasse. Damit kannst du Dienste starten, beenden, usw. Musst aber noch nen Verweis zu "System.ServiceProcess" setzen.

    msdn.microsoft.com/de-de/libra…econtroller(v=vs.80).aspx
    Stimmt, da hat GambaJo Recht. Ich habe diese Klasse nicht verwendet, da ich einen Dienst installiereb wollte und es dafür leider keine Methode gab (weshalb ich mir einfach einen kompletten Wrapper geschrieben habe). Aber stimmt, für dich sollte sie komplett ausreichen.

    Leider immer noch Fehler [HILFE]

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Dim strItemCheck As String
    3. Dim objProcess As System.Diagnostics.Process
    4. Dim blnFound As Boolean
    5. Dim scServices() As ServiceController
    6. scServices = ServiceController.GetServices()
    7. ' Durchläuft alle markierten Einträge
    8. For index As Integer = 0 To ListView1.CheckedItems.Count - 1
    9. ' Hilfsvariable für den Pfad
    10. Dim fullpath As String = ListView1.CheckedItems(index).Text
    11. ' Dateiname ohne Dateiendung (=ProcessName)
    12. Dim processname As String = IO.Path.GetFileNameWithoutExtension(fullpath)
    13. strItemCheck = ListView1.CheckedItems(index).Text
    14. If String.Compare(strItemCheck, "Prozess", False) = 0 Then
    15. ' Prüfen, ob Process mit dem aktuellen processname schon läuft
    16. For Each objProcess In System.Diagnostics.Process.GetProcesses
    17. blnFound = (String.Compare(strItemCheck, objProcess.ProcessName, False) = 0)
    18. If blnFound Then Exit For
    19. Next objProcess
    20. ' Versuche, Process zu starten
    21. If Not blnFound Then
    22. Try
    23. System.Diagnostics.Process.Start(fullpath)
    24. Catch ex As Exception
    25. ' MessageBox.Show(ex.Message)
    26. End Try
    27. End If
    28. End If
    29. Next index
    30. ' Durchläuft alle markierten Einträge
    31. For index As Integer = 0 To ListView1.CheckedItems.Count - 1
    32. ' Hilfsvariable für den Dienst
    33. Dim fullpath As String = ListView1.CheckedItems(index).Text
    34. ' Dateiname ohne Dateiendung (=Dienst)
    35. Dim dienstname As String = IO.Path.GetFileNameWithoutExtension(fullpath)
    36. strItemCheck = ListView1.CheckedItems(index).Text
    37. If String.Compare(strItemCheck, "Dienst", False) = 0 Then
    38. ' Prüfen, ob Dienst mit dem aktuellen objDienst schon läuft
    39. For Each objDienst In scServices
    40. blnFound = (String.Compare(strItemCheck, objDienst.ServiceName, False) = 0)
    41. If blnFound Then Exit For
    42. Next objDienst
    43. ' Versuche,Dienst zu starten
    44. If Not blnFound Then
    45. Try
    46. Dim sc As New ServiceController(fullpath)
    47. If sc.Status.Equals(ServiceControllerStatus.Stopped) Or sc.Status.Equals(ServiceControllerStatus.StopPending) Then
    48. ' Start the service if the current status is stopped.
    49. Console.WriteLine("Starting the service...")
    50. sc.Start()
    51. End If
    52. ' Refresh and display the current service status.
    53. sc.Refresh()
    54. Console.WriteLine("The service status is now set to {0}.", sc.Status)
    55. Catch ex As Exception
    56. ' MessageBox.Show(ex.Message)
    57. End Try
    58. End If
    59. End If
    60. Next
    61. End Sub


    Kann mir jemand Helfen ?
    - Keine Fehlerausgabe bei VB

    Besten Dank
    Was für ein Fehler tritt den jetzt noch auf?
    Bricht das Programm ab, oder läuft es durch?

    Der Name des Dienstes muss nicht gleich dem Namen der Datei sein. Der Name, über den man den Dienst referenzieren kann, findest Du, wenn Du im Dienste-Manager in die Eigenschaften des Dienstes gehst, und dort den „Dienstnamen“ (Nicht den Anzeigenamen!) anschaust.