Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#29

AW: Klasse zum Beenden eines Prozesses

  Alt 21. Nov 2010, 16:10
Man muss eine Instanz von TKillProcess erzeugen um eine andere Instanz zu beenden.
Das halte ich für unlogisch.
Ein Prozess ist mich keine Instanz.

Zitat:
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.
Für mich hat eine Klasse schon dann eine Daseinsberechtigung, wenn sie mehrere zusammen gehörende Routinen kapselt.

Zitat:
Eine Möglichkeit wäre es doch erst beim Aufrufen der Methode Kill die ProcessID zu ermitteln und dann zu killen.
Das wäre eine Möglichkeit, die es sich lohnt noch mal zu überdenken. Aber selbst dann hast du, wenn du sauber programmieren willst mindestens zwei Routinen.
Zitat:
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 ergibt Sinn.

Zitat:
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.
Dann müsste ich nach dem Beenden die Prozessliste immer wieder durchlaufen. Mal gucken, wie sich das realisieren lässt.

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.

Zitat:
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
Dann setze den Prozessnamen nach dem Code:
Delphi-Quellcode:
KP := TKillProcess.Create;
try
  // Ich muss jetzt noch ein paar Sachen prüfen, die so eine gewisse Zeit dauern
  Sleep( 10000 ); // So als Dummy-Beschäftigung

  KP.FileName := 'notepad++.exe'; // Jetzt ermittelt die Klasse die PID
  KP.Kill; // Ja, ist denn die PID von eben immer noch die richtige?
  
finally
  KP.Free;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat