Man muss eine Instanz von
TKillProcess
erzeugen um eine andere Instanz zu beenden.
Das halte ich für unlogisch.
Mit der Klasse
TKillProcess
fragst du eh schon die Eigenschaften des Prozesses ab, weil du ja zu einem ExeNamen die ProcessID ermitteln möchtest.
Für mich würde die Klasse nur dann einen Sinn ergeben, wenn die Klasse eine längere Daseinsberechtigung als nur zum reinen Killen des Prozesses.
Eine Möglichkeit wäre es doch erst beim Aufrufen der Methode Kill die ProcessID zu ermitteln und dann zu killen.
Dann erzeugt man sich die Klasse, gibt den ExeNamen an und immer wenn man diese Exe aus dem Speicher haben möchte ruft man einfach Kill auf und die Prozesse werden gelöscht.
Das vermisse ich auch irgendwie, wenn eine Anwendung n-fach gestartet wurde, dann wird nur eine gelöscht. Welche das ist, hängt davon ab, welche als letzte in der Prozess-Liste steht.
Somit würde ich erwarten, dass bei der Angabe eines ExeNamens alle Prozesse gelöscht werden, die dazu gehören.
Dann wäre das Verhalten auch eindeutig und nicht ein Zufallsprodukt.
Ei Argument, was noch gegen die Verwendung einer Klasse spricht ist, dass es bei dem jetzigen Aufbau zu Fehlern kommen kann, die man so eigentlich nicht haben will.
Delphi-Quellcode:
KP := TKillProcess.Create;
try
KP.FileName := 'notepad++.exe'; // Jetzt ermittelt die Klasse die PID
// Ich muss jetzt noch ein paar Sachen prüfen, die so eine gewisse Zeit dauern
Sleep( 10000 ); // So als Dummy-Beschäftigung
KP.Kill; // Ja, ist denn die PID von eben immer noch die richtige?
finally
KP.Free;
end;
Dieses ist durch dein Design so möglich und kann dazu führen, dass
a) Der Prozess ist schon beendet worden (von wem auch immer)
Wenn Kill jetzt einen Fehler wirft, ist der Fehler dann nicht verwirrend.
Ich möchte das als Resultat der Prozess nicht mehr im System läuft.
Das ist ja auch erreicht worden (zwar nicht ursächlich durch die Klasse, aber das Resultat ist das Gleiche) aber ich bekomme einen Fehler.
Könnte man evtl. noch mit leben
b) Der Prozess ist schon beendet worden( von wem auch immer) und ein völlig anderer Prozess (z.B. outlook.exe) hat jetzt die gleiche PID bekommen wie notepad++.exe vorher hatte. Nun wird mit Kill nicht notepad++.exe sondern outlook.exe geschlossen