Prozessüberwachung

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von lris08.

    Prozessüberwachung

    Hallo,

    ich möchte gerne im Hintergrund meines Programms "Form1" eine überwachung haben eines bestimmten Dienstes.

    aussehen soll's so:

    Programm wird gestartet, im hintergrund wird permanent geprüft ob ein Dienst gerade am arbeiten ist, wenn ja - soll eine bestimmte Funktion in meinem Programm gesperrt sein, wenn nein kann eine bestimmte Funktion meines Programms ausgeführt werden.

    Hab jetzt schon bisserl was gelesen über den Backgroungworker - ich denke das ist mein neuer Freund?
    Und wenn ich richtig weitergelesen habe - System.Diagnostics.Process wird auch zu meinem neuen Freund?

    Bin ich soweit richtig?
    richtig, das sind deine Freunde schätze ich(wobei das auch nur bei Prozessen gilt, Dienste werden hier meineswissens nicht mit einbezogen)...

    Process.GetProcessesByName("name").Length wenn diese Eigenschaft größer 0 ist, dnan ist der Prozess gestartet ,)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    fogendes habe ich mir nun zusammengebastelt...

    VB.NET-Quellcode

    1. Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    2. 'prüft ob der bgw noch läuft und beendet diesen dann
    3. 'bedingung - siehe form_load
    4. If BackgroundWorker1.IsBusy Then
    5. BackgroundWorker1.CancelAsync()
    6. End If
    7. End Sub


    VB.NET-Quellcode

    1. Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. 'so startet man den bgw
    3. BackgroundWorker1.RunWorkerAsync("wuauserv")
    4. 'erlaubt zugriff auf die windows form
    5. BackgroundWorker1.WorkerReportsProgress = True
    6. 'erlaubt unterbrechung des bgw z.b. wenn das programm beendet wird
    7. BackgroundWorker1.WorkerSupportsCancellation = True
    8. End Sub


    VB.NET-Quellcode

    1. Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    2. BackgroundWorker1.ReportProgress(100) 'die 100 steht hier für einen prozentsatz
    3. If Process.GetProcessesByName("wuauserv").Length > 0 Then
    4. MsgBox("wuauserv aktiv")
    5. End If
    6. End Sub



    Gestestet hab ich das jetzt mal am Windows Update Services. Laut Dienste unter Verwaltung bei Vista jetzt mal zum test, steht - Dienst aktiv - soweit ok, aber er wurde gerade ja niht ausgeführt.

    Mein Programm gestartet - vorher noch Windowsupdate ausführen lassen - aber leider bringt mir mein Programm keine MSGbox...

    Lieg ich mit meinem Code soweit überhaupt richtig?
    wie bereits gesagt, das ist für Prozesse und wohl eher nicht für Dienste...
    http://vb4all.de/cgi-bin/loadframe.pl?ID=dotnet/tipps/tip0071.shtml

    services = ServiceController.GetServices(MachineName)
    For i = 0 To services.Length - 1

    das ist der wichtige Teil...
    und mit services(i).Name oder auch ServiceName überprüfen, ob dein Service dabei ist ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Fehlermeldung:
    "ServiceController" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden.

    Imports System.ServiceProcess <---- ist grün unterlegt

    VB.NET-Quellcode

    1. Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    2. Dim Dienste As ServiceController
    3. Dienste = New ServiceController
    4. For Each Dienste In ServiceController.GetServices("wuauserv")
    5. With Dienste
    6. ListBox1.Items.Add(.ServiceName & " = " & .Status.ToString) <- nur zum rest ausgabe on der Listbox
    7. End With
    8. Next Dienste
    9. End Sub



    was ist daran falsch.. ?


    und bei dieser Variante:

    VB.NET-Quellcode

    1. Dim services = ServiceController.GetServices("wuauserv")
    2. For i = 0 To services.Length - 1
    3. MsgBox("wuauserv aktiv")
    4. Next


    "ServiceController" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden.

    und immer keine Ausgabe...
    jo, das war's ... danke - an den Verweis hatte ich nicht gedch... danke.


    Laufen tu's - aber nmun bricht er ab mit der Meldung:
    Der Dienststeuerungs-Manager auf dem Computer wuauserv kann nicht geöffnet werden. Möglicherweise verfügen Sie nicht über die Berechtigung zum Ausführen dieses Vorgangs.


    Aber hallo - ich bin als Admin angemeldet - solle ich doch eigentlich die Berechtigung haben oder etwa nicht?
    Leider bekomm ich es nicht richtig zu laufen...

    Machen tut er was, immerhin gehr die Ausführung nur unter "Ausführen als Admin..."...
    Sonst meckert er, weil er auf den service zugreiffen will...

    also macht er was, aber er bringt mir einfach keine Ausgabe...

    VB.NET-Quellcode

    1. Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. 'so startet man den bgw
    3. BackgroundWorker1.RunWorkerAsync()
    4. End Sub
    5. Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    6. Dim services = ServiceController.GetServices("wuauserv")
    7. For i = 0 To services.Length - 1
    8. Kontrollwert = 0
    9. Next
    10. End Sub
    11. Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
    12. If Kontrollwert = 0 Then
    13. Label11.Text = "Backup Services derzeit nicht aktiv, Sicherung kann begonnen werden!"
    14. Else
    15. Label11.Text = "STOP - Sicherung derzeit nicht möglich, Backup Services läuft gerade!"
    16. End If
    17. End Sub
    18. Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    19. MessageBox.Show("Fertig" & Kontrollwert)
    20. End Sub



    Bitte helft mir - ganzen Nachmittag damit schon vertan--- bin jetzt echt bisserl frustriert :)

    Ausserdem habe ich noch was anderes bemerkt - wenn ich wie hier in dem Beispiel prüfe ob der services wuauserv aktiv ist - ja klar der ist immer aktiv, aber ob auch gerade eine aktion durchführt - also ob er gerade auch nach ein Update sucht kann ich ja so gar nicht feststellen oder?


    danke vorab...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „lris08“ ()

    jepp, hast recht kontrollwert geändert auf 1 - aber...

    er gibt mir die Infos in Label11 nicht aus!

    und...

    da ich den Kontrollwert vor der schleife nicht belegt habe, ist also leer, sollte eigentlich nach beendigung der scheife der kontrollwert mit 1 immer noch belegt sein...
    unter msgbox - wird jedoch nix ausgegeben

    VB.NET-Quellcode

    1. Dim services = ServiceController.GetServices("wuauserv").ToString()
    2. For i = 0 To services.Length - 1
    3. Kontrollwert = 1
    4. Next


    so besser?

    mit dem code kann ich doch nur feststellen ob der services aktiv ist - sprich gestartet ist oder?`
    kann aber nicht feststellen ob der gerade was mach oder?