Prozess überwachen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von TheGameSiders.

    Prozess überwachen

    Hi liebe Community,

    Ich habe ein Programm, das mir sagen soll, wenn ein bestimmter prozess beendet wurde.

    Das hab ich erstmal mit einer Listview, in der die prozesse aufgelistet werden, realisiert.
    Je nach dem, auf welche zeile man dann in der listview klickt, geht ein weiteres fenster mit dem prozessnamen auf. so weit bin ich schonmal.
    Ich will jetzt im prinzip mit einem button ein timer starten, der z.B. alle 3 sec. prüft, ob der ausgewählte prozess noch existiert. Wenn nicht, tu dies, falls er existiert, tu das.

    habe mit dem befehl hasExited & responding gearbeitet, ohne erfolg...

    Kann mir da jmd helfen ?

    GreeZ
    Jein...

    Ich will damit normaler Weise den Prozess "exeplorer.exe" überwachen.
    Mit der Funktion, die du mir geschickt hast, wird ja erst ein Prozess gestartet, und dann dieser überwacht.
    Im Falle bei mir ist der Explorer.exe ja schon gestartet.


    Danke schonmal ;)
    Also in meinem timer1 steht folgender Code:

    VB.NET-Quellcode

    1. For Each p As Process In Process.GetProcessesByName("explorer")
    2. If p.HasExited = True Then MsgBox("explorer wurde beendet!")
    3. Next


    Passiert aber nix. Timer interval steht auf 100.

    EDIT: Wenn ich mir die Prozesse in eine Listview auflisten lasse, steht der Prozessname auch ohne ".exe" Darum auch nur "explorer"
    Um genau zu sein, wollt ich es nur an dem Explorer testen. Angewendet
    soll das an einem anderem programm, was sich nicht immer schießen lässt,
    nachdem man auf X geklickt hat.

    Damit will ich halt prüfen, ob es immernoch im hintergrund läuft, ohne jedesmal den TastMgr aufzurufen.

    Wie meinst du das mit "nicht existiert" ?
    Es soll ja automatisch gehen, und ich will das ja mit einer MsgBox ausgegeben haben, ob er sich diesmal gleich beendet hat oder nicht ;)

    Es gibt ja die Funktion HasExited()

    wie wendet man diese korekt an, wenn man damit einen prozess überwachen will, der schon gestartet ist ?
    Du suchst den Prozess per Name und checkst ob der gefunden wurde oder nicht.

    Edit:
    Wenn du den Prozess schon vor dem Beenden in einer Variablen hast und dann überprüfen möchtest, ob der Prozess beendet wurde, dann hilft dir HasExited weiter.

    Du sucht aber in dem Code oben nur nach dem Prozess und wenn du ihn gefunden hast, dann ist HasExited immer true :)

    MSDN hilft so gut wie immer weiter:
    http://msdn.microsoft.com/de-de/library/system.diagnostics.process.hasexited.aspx

    VB.NET-Quellcode

    1. ' Code nicht getestet
    2. Dim plist As Process() = Process.GetProcessesByName("executable.exe")
    3. If plist.Count > 0 Then
    4. ' Prozess gefunden, da Einträge in der Liste vorhanden sind
    5. MessageBox.Show("Der Prozess läuft noch!")
    6. End If


    http://msdn.microsoft.com/de-de/library/z3w4xdc9#Y0
    Auch wenn es erledigt ist, gibt es noch eine etwas andere Möglichkeit:

    VB.NET-Quellcode

    1. If System.Diagnostics.Process.GetProcessesByName("deinprogramm ohne .exe").Length > 0 Then
    2. MsgBox("Prozess besteht noch!", MsgBoxStyle.Information)
    3. Else
    4. MsgBox("Prozess wurde beendet!", MsgBoxStyle.Information)
    5. End If


    Starten tut man sie z.B so:

    VB.NET-Quellcode

    1. Shell("Pfad oder Name Der Exe im gleichen Ordner mit .exe"

    oder so

    VB.NET-Quellcode

    1. System.Diagnostics.Process.Start("Pfad oder Name Der Exe im gleichen Ordner mit .exe")


    Mfg. TGS