| |
VB.NET - Ein- und UmsteigerFrage 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 | |
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.
| |
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. | |
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 | |
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.
| |
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. | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|