![]() |
z.B. Taskkill erkennen
Moin,
ist es irgendwie möglich, in einem Delphi-Programm den Abbruch durch z.B. taskkill zu erkennen? Mir geht es darum z.B. noch 'hängende' Transaktionen etc. sauber beenden zu können, wenn ein Programm aus anderen Gründen hängen sollte und per z.B. Taskmanager 'abgeschossen' werden soll. Kann ich da irgendeine Message abfangen? Hinweise sind sehr willkommen ;-) |
AW: z.B. Taskkill erkennen
Ich würde stetig prüfen, ob der Prozess noch existiert. Wenn nicht, wurde er abgeschossen oder anders beendet.
|
AW: z.B. Taskkill erkennen
Zitat:
|
AW: z.B. Taskkill erkennen
Das Nein war vermutlich darauf bezogen, dass du keine Message bekommst wenn ein Task hart beendet wird.
Aber warum eine Message abfangen wollen, wenn man einfach auf Existenz eines Prozesses prüfen kann. Ob ein Prozess hängt wird glaube ich schwieriger. Wenn es dein eigenes Programm ist was hängt, gibt es irgendwo nicht behandelte oder richtig behandelte Fehler im Code. |
AW: z.B. Taskkill erkennen
Zitat:
Die einzige Möglichkeit die mir einfällt, die funktionieren könnte wäre TerminateProcess global zu hooken. Das ist aber ne größere Aktion. Ansonsten gilt: Zitat:
|
AW: z.B. Taskkill erkennen
Moin,
danke für die schnellen Antworten! Ich hatte mir schon gedacht, dass es nicht einfach geht, bzw. gar nicht gehen könnte...schade, wäre nützlich... |
AW: z.B. Taskkill erkennen
Wie machen es die Prozesse, die man nicht killen kann? Laufen die in einem anderen Kontext?
|
AW: z.B. Taskkill erkennen
Zitat:
Grüße Dalai |
AW: z.B. Taskkill erkennen
Nur eine Vermutung. Aber warum zerbrichst du dir wegen ein paar Nutzern den Kopf? Wenn die dein Programm per TaskManager abschießen und das Risiko korrupter Daten damit eingehen, ist das deren Problem.
|
AW: z.B. Taskkill erkennen
Zitat:
|
AW: z.B. Taskkill erkennen
Die beste AntiTaskKillMethode bringt doch eh nix. Zieh dem PC den Strom und du hast das gleiche Problem wenn es keine USV gibt.
Das sind Lösungen für Probleme, die man am besten gar nicht erst angehen sollte. Sowas würde ich eher in den Lizenzbedingungen des Programms festhalten und mich absichern. |
AW: z.B. Taskkill erkennen
Zitat:
|
AW: z.B. Taskkill erkennen
Mach dir doch einfach einen Thread, der laufend alle laufenden Prozesse auflistet und wenn z.B. Taskmgr (und ggf. noch andere Prozessmanager) dabei ist, dieses logged. Zusätzlich lässt du den Thread selbst per was ins log schreiben. Wenn nun der Taskmanager aufgerufen wurde und dann von deinem Thread kein Logeintrag mehr kam, kannst du davon ausgehen, dass der Prozess abgeschossen wurde.
Ist zwar zusätzlicher Traffic, aber so könnte ich mir vorstellen, könntest du das beweisen. Bringt natürlich alles nix, wenn, wie Dolly schon sagt, jemand den Strom abschaltet. Es gibt ja so Menschen, die sind so pfiffig und schalten den PC über eine Mehrfachsteckdose mit Schalter aus ;-) |
AW: z.B. Taskkill erkennen
Zitat:
Egal was man hier versucht umzusetzen, es ist Zeitverschwendung ... und auch Geldverschwendung. |
AW: z.B. Taskkill erkennen
Zitat:
|
AW: z.B. Taskkill erkennen
Zitat:
Und wenn mir ein Kunden Datenverlust unterstellen will, ich aber in der Annahme bin, dass er es selbst verursacht, dann ist das für mich keine Zeit- oder Geldverschwendung. Eher im Gegenteil. Denn wenn ich ihm im Zweifelsfall nachweisen kann, dass er das Problem durch falsche Handhabung selbst verursacht hat, dann könnte ich ihm den Aufwand in Rechnung stellen und nicht er mir den Datenverlust. (Immer mal davon ausgegangen, dass es auch so ist, und TE es so gemeint hat und nicht andere Programmierfehler dafür verantwortlich sind). Wenn es natürlich aus anderen Gründen "hängt" und der Benutzer gezwungen ist, das Programm abzuschießen, nützt das alles nichts. Und wenn er Taskkill verwendet sowieso nicht, weil das im Gegensatz zum Taskmanager sich sofort wieder beendet, also nur schwer zu erfassen ist. Also gehe ich in meinem Vorschlag lediglich von dem Taskmgr aus. |
AW: z.B. Taskkill erkennen
Zitat:
Denk mal darüber nach. Gruß K-H |
AW: z.B. Taskkill erkennen
Zitat:
Es gibt so viele Varianten, wie man Programme unsauber beenden kann, dass man sich weniger auf diese vielen verschiedenen Methoden konzentrieren sollte, und mehr darauf, ob es sauber beendet wurde. Unabhängig davon ist die gestellte Frage durchaus interessant. Was nicht notwendigerweise bedeutet, dass die gesuchte Methode geeignet ist, das/die bestehende Problem/Aufgabe zu lösen/erfüllen ;). Grüße Dalai |
AW: z.B. Taskkill erkennen
Prinzipiell macht es eher Sinn wie z.B. Eclipse auf Multithreading und gut getrennte GUI-Logik zu setzen. Dann kann die Oberfläche kaum hängen bleiben.
Einen Taskkill kann man tatsächlich rein theoretisch verhindern indem man etwas Schindluder mit Sockethandles treibt. Dann verhindert Windows selbst nämlich das Beenden des Tasks. Aus nahe liegenden Gründen möchte ich das hier nicht weiter erörtern auch wenn das Problem seit Windows 8 größtenteils gelöst ist. Für das aktuelle Problem würde es auch nichts bringen, denn man verhindert nicht nur einen Taskkill, sondern man kann das eigene Programm dann leider auch selbst nicht mehr beenden (zumindest habe ich noch keine Möglichkeit gefunden). Und falls man in der Vergangenheit Probleme mit Hängern hatte, die man nicht finden konnte, kann dort z.B. Eurekalog helfen. Das schreibt nicht nur bei Exceptions Bugreporte, sondern kann das auch machen, wenn das Programm eine einstellbare Zeit nicht mehr reagiert. Die von Dalai genannten Flags zur Erkennung eines sauberen Herunterfahrens kann man z.B. mit Logs im Systemeventlog kombinieren, wenn so Probleme erkannt wurden. |
AW: z.B. Taskkill erkennen
Delphi-Quellcode:
SchreibeLog('Ich tue jetzt was.');
TueWas(); SchreibeLog('Ich tue jetzt nichts mehr.'); |
AW: z.B. Taskkill erkennen
Zitat:
Ich gehe mal ganz stark davon aus, das TE eine Möglichkeit zum Beenden eingebaut hat. Also bin ich auf Grund seiner Beiträge davon ausgegangen, dass er einem Benutzer nachweisen will, dass er dort was macht, was er nicht machen soll. Ich könnte mir vorstellen, dass ggf. irgendwo eine längere Routine im Mainthread läuft. Der Benutzer klickt nun auf der Form rum, das Programm reagiert seiner Meinung nach nicht (vielleicht meldet auch Windows "Das Programm reagiert nicht") und schon wird, je nach User, schnell der Taskmanager gezückt. Vielleicht will der TE im ja genau dieses Verhalten nachweisen. Was aber genau, das weiß nur der TE persönlich. |
AW: z.B. Taskkill erkennen
Zitat:
Grüße Dalai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz