vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Frage zu process.kill mit checklist 
Autor: Tobias2014
Datum: 29.06.15 14:12

Hi Leute,

Wie kann ich ausgewählte Prozessnamen in einer Checklist, beenden?

        For Each Prozess As Process In (Checkliste)
            Prozess.Kill()
        Next
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu process.kill mit checklist 
Autor: Manfred X
Datum: 29.06.15 19:42

Hallo!

Prozesse zu killen ist nicht die "feine Art".

Solche Programme sollten die Option besitzen, eine Beendigungs-Mitteilung
zu empfangen, nach der sie sich zum nächst möglichen Zeitpunkt geordnet
terminieren.

Ansonsten:
Ermittle beim Aufbau der Checkliste jeweils die ProzessID aller aktuell laufenden
Prozesse. Die ID (+Prozessname) wäre das Auswahlkriterium für die Checkliste.
Beim "Kill" prüfst Du zunächst, ob es diesen Prozess noch gibt.

Günstiger wäre es, wenn derartige (für den "potentiellen Kill") vorgesehene Prozesse
ihren Start und ihre Beendigung protokollieren würden.

Aber nochmal: Prozesse per Programm zu killen ist nicht empfehlenswert.
Insbesondere bei Anforderung durch einen User.
Dafür gibt es den Windows-Taskmanager.



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Das Killer-Formular 
Autor: Manfred X
Datum: 29.06.15 20:55

Public Class frmProcessKiller
 
    Dim pd As New DataTable
 
    Dim dgv As New DataGridView With _
        {.Parent = Me, .Height = 300, .Width = 500}
 
    Dim WithEvents btnKill As New Button With _
        {.Parent = Me, .Text = "Kill", .Top = 320}
 
    Dim WithEvents btnRefresh As New Button With _
        {.Parent = Me, .Text = "Refresh", .Top = 320, .Left = 200}
 
 
    Private Sub frmProcessList_Load(sender As System.Object, _
        e As System.EventArgs) Handles MyBase.Load
 
        Me.Size = New Size(510, 370)
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.Fixed3D
 
        With pd.Columns
            .Add("Kill", GetType(Boolean))
            .Add("PID", GetType(Integer))
            .Add("Name", GetType(String))
            .Add("Start", GetType(Date))
        End With
 
        For Each c As DataColumn In pd.Columns
            If Not c.ColumnName = "Kill" Then
                c.ReadOnly = True
            End If
        Next c
 
        Me.Show()
        My.Application.DoEvents()
 
        dgv.AllowUserToAddRows = False
        dgv.AllowUserToDeleteRows = False
 
        FillProcessTable()
    End Sub
 
 
 
    Private Sub btnKill_Click(sender As Object, _
        e As System.EventArgs) Handles btnKill.Click
 
        Dim Pid As Integer
        For Each r As DataRow In pd.Rows
            If DirectCast(r("Kill"), Boolean) = True Then
                Try
                    Pid = DirectCast(r("PID"), Integer)
                    Dim p As Process = Process.GetProcessById(Pid)
                    If p.ProcessName = r("Name").ToString And _
                       p.StartTime = CDate(r("Start")) Then
                        Try
                            p.Kill()
                        Catch ex As Exception
                            MsgBox("PID: " & Pid.ToString & "  " & ex.Message)
                        End Try
                    End If
                Catch ex As Exception
                    MsgBox(CStr(Pid) & " " & ex.Message)
                End Try
 
            End If
        Next r
        FillProcessTable()
    End Sub
 
 
    Private Sub FillProcessTable()
 
        Me.Text = "Liste der Prozesse wird erstellt - Bitte warten ..."
        btnKill.Enabled = False
        btnRefresh.Enabled = False
 
        dgv.DataSource = Nothing
        Me.Refresh()
 
        pd.Rows.Clear()
        For Each p As Diagnostics.Process In Diagnostics.Process.GetProcesses
            Try
                pd.Rows.Add("false", p.Id, p.ProcessName, p.StartTime)
            Catch
            End Try
        Next p
        dgv.DataSource = pd
        dgv.Refresh()
        btnKill.Enabled = True
        btnRefresh.Enabled = True
        Me.Text = "Prozessliste"
    End Sub
 
 
    Private Sub btnRefresh_Click(sender As Object, _
                    e As System.EventArgs) Handles btnRefresh.Click
        FillProcessTable()
    End Sub
End Class
Warnung: Beim Killen eines Prozesses gehen nicht gespeicherte Daten verloren
und bei Systemprozessen kann das System instabil werden.


Beitrag wurde zuletzt am 29.06.15 um 20:59:41 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu process.kill mit checklist 
Autor: sv00010
Datum: 29.06.15 21:21

Manfred X schrieb:
Zitat:

Hallo!

Prozesse zu killen ist nicht die "feine Art".

Solche Programme sollten die Option besitzen, eine
Beendigungs-Mitteilung
zu empfangen, nach der sie sich zum nächst möglichen
Zeitpunkt geordnet
terminieren.
Manchmal muss es aber sein, z.B. wenn Application.Exit keine Wirkung zeigt.
Außerdem kann man den eigenen Prozess killen (vorher Messagebox ausgeben), wenn man verhindern will, dass das Programm auf einem Betriebssystem läuft, für welches es nicht vorgesehen ist (wegen verwendeter API-Aufrufe usw.) bzw. den Start nicht zuzulassen, wenn die Hardwareanforderungen nicht erfüllt sind.
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu process.kill mit checklist 
Autor: Manfred X
Datum: 29.06.15 21:32

Hallo!

Ich denke, wenn man (z.B. durch eine Anwendung) einen Prozess gestartet hat,
den man "im Ernstfall" nur noch per Kill beenden kann, sollte man dieses
Programm noch einmal überarbeiten.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Frage zu process.kill mit checklist 
Autor: Tobias2014
Datum: 30.06.15 06:56

Danke für die Hilfe.
Ich habe vor das Programm im Hintergrund laufen zu lassen, da Excel 32-Bit sehr oft abstürzt / sich aufhängt.
Jedenfalls muss man in meinem Programm nicht wie im Taskmanager jedes mal suchen, sondern einfach nur auf einen Button klicken.

Und an alle die sich sorgen, dass das durch mich in falsche Hände geraten könnte (z.B. Welche die nicht wissen was man beenden darf): Ich habe das Programm auf einem Privaten Laufwerk mit meinen anderen Programmen mehrfach gesichert, damit nur ich dran komme. Wenn sich jemand selbst ein derartiges Programm erstellt ist es seine Sache, er/sie sollte dann nur besser wissen wie man damit umgeht.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel