If Prozess ist aktiv

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von julianibus.

    If Prozess ist aktiv

    Hallo… vielleicht liegt es der Uhrzeit, vielleicht an meiner leern Eisteeflasche, vielleicht daran, dass Google mir nur Müll ausspuckt, oder daran, dass ich bei der SuFu nix finde… auf jeden Fall liegt es an mir.
    Ich möchte einen Prozess beenden, falls er denn aktiv ist, sonst etwas anderes tun…
    Also:

    VB.NET-Quellcode

    1. If "PROZESS.EXE" [IstAktiv] = true then
    2. Kill("PROZESS.EXE")
    3. Else
    4. 'Bliblablu
    5. End If

    Nach dem Motto. How to?

    CodeTags gesetzt ~VaporiZed

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

    Na ja… dieser Code unten ist doch etwas lang, die anderen oben helfen mir nicht.
    Den Pfad weiß ich nämlich.
    Ich möchte es nur wie oben im Beispiel beschrieben machen, wenn ein Prozess aktiv ist, dann BLABLABLA.
    Final Griever

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

    Ich glaube, dieses Thema hatten wir schonmal im Forum.

    Ich hab diesen Code mal kopiert, habe aber keine Ahnung, ob der funktioniert, da er eher nach VB6 aussieht:

    VB.NET-Quellcode

    1. Private Sub cmdCheck_Click()
    2. If IsTaskActive("firefox.exe") Then
    3. MsgBox "Firefox wird noch ausgeführt!"
    4. Else
    5. MsgBox "Firefox wurde bereits beendet!"
    6. End If
    7. End Sub


    Vielleicht hilfts dir trotzdem.

    PS: Wenn bei Google suchst, dürftest du viel dazu finden, llerdings ist das meiste davon zu kompliziert und unübersichtlich :wacko:

    mfg, julianibus
    hallo griever,

    so würde ich einen prozess beenden

    VB.NET-Quellcode

    1. Dim p() As Process = Process.GetProcessesByName("notepad")
    2. If p.Length > 0 Then
    3. 'prozess versuchen regulär zu schliessen
    4. p(0).CloseMainWindow()
    5. 'wenn das nichts hilft dann kann man den prozess auch abschiessen.
    6. 'dazu etwas warten - jeder prozess braucht zeit bis er auch wirklich geschlossen ist
    7. 'nochmal prüfen und ggf mit
    8. 'p(0).kill
    9. 'den prozess abschiessen
    10. End If


    EDIT:
    das obige beispiel ist natürlich alles andere als perfekt, weil es davon ausgeht, dass es nur einen laufenden (notepad)prozess gibt.
    aber zumindest zeigt es wie die vorgehensweise ist.

    gruss

    mikeb69

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

    hallo griever,

    ich hab das mal neben dem plätzchen backen ein wenig weiter getrieben.
    immer noch nicht perfekt - aber doch besser

    VB.NET-Quellcode

    1. 'hilfsvariable um den durchgang ermitteln zu können
    2. Dim first_try As Boolean = True
    3. Do
    4. 'alle prozesse der zu schliessenden anwendung durchlaufen
    5. For Each p As Process In Process.GetProcessesByName("notepad")
    6. If first_try = True Then
    7. 'beim ersten durchlauf, versuchen das ganze regulär zu beenden
    8. p.CloseMainWindow()
    9. Else
    10. 'beim zweiten durchgang - abschiessen
    11. Dim answer As DialogResult = MessageBox.Show("Dieser Prozess enthält möglicherweise ungesicherte Daten" & vbCrLf & _
    12. "Möchten Sie diese Speichern oder soll der Prozess beendet werden ?", _
    13. "Daten speichern ...", _
    14. MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)
    15. If answer = Windows.Forms.DialogResult.Yes Then
    16. p.WaitForExit()
    17. Else
    18. p.Kill()
    19. End If
    20. End If
    21. Next
    22. first_try = False
    23. 'eine kleine wartezeit - um den prozessen zeit zu geben sich zu schliessen
    24. Threading.Thread.Sleep(1000)
    25. Loop While Process.GetProcessesByName("notepad").Length > 0

    gruss

    mikeb69
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Dankeschön, das ist ja noch besser :)

    Aber ich weiß immer noch nicht, wie ich überprüfen kann, ob ein Prozess aktiv ist… : :S

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

    hallo griever,

    ich denke wir müssen nun definieren was
    ob ein Prozess aktiv ist

    bedeuten soll.

    für mich ist ein prozess aktiv, wenn er in der taskmanager prozessliste aufgeführt wird.
    dies kann man rausfinden wenn man z.b. über den prozessnamen (meist den dateinamen ohne .exe am ende) geht.

    VB.NET-Quellcode

    1. Dim p() As Process = Process.GetProcessesByName("notepad")

    ist nun p nicht mehr leer, sondern enthält mindestens einen eintrag, so ist der prozess aktiv.

    hast du eine andere definition ?

    gruss

    mikeb69
    Doch nochmal etwas:
    Wie gucke ich, ob ein Prozess aktiv ist?
    Denn mit For…Each, wenn ich statt des Prozesskillens erst noch eine MsgBox ausgeben will… denn sonst stellt er mir erst 100k MsgBoxen hin, bevor er es beendet.
    Threading.Thread.Sleep(X) hilft da auch nicht weiter…

    oder halt… ich merke, gerade, dass mein Timer irgendwie kaputt zu sien scheint! ?(

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. MsgBox("blabla hallo", MsgBoxStyle.Information, "bliblubla")
    3. Timer1.Stop()
    4. End Sub

    Das Ttimer1-Intervall ist 100, d.h. jede Zehntel Sekunde ein Tick.
    Aber wieso stoppt der Timer nicht?! Er wirft mir X Fenster raus!
    Auch auf Timer1.Enabled = false hört er nicht… :cursing:
    (der Timer wird auch nur einmal gestartet, und zwar im Form_Load)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Final Griever“ ()