Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Sich gegen KillProcess wehren (https://www.delphipraxis.net/103828-sich-gegen-killprocess-wehren.html)

gmc616 22. Nov 2007 11:34


Sich gegen KillProcess wehren
 
Hallo DP,

kann sich ein Delphi-Programm dagegen wehren, über den Taskmanager abgeschossen zu werden?
Oder, kriegt man es hin, dass wenn das Programm abgeschossen wird, sich dieses korrekt beendet und evtl. ein LogFile schreibt?

Ich glaube zwar nicht daran, aber vlt. wisst ihr es besser.

Grüße :hi:
gmc

mkinzler 22. Nov 2007 11:36

Re: Sich gegen KillProcess wehren
 
.CloseQuery() wird beim Beenden aufgerufen

Progman 22. Nov 2007 11:40

Re: Sich gegen KillProcess wehren
 
Aber ob beim Prozess-Killen auch CloseQuery durchlaufen wird, bin ich mir nicht sicher, denn es wird auch trotz CanClose=False geschlossen. Müsste man mal testen und im CloseQuery ein Log schreiben. Dann sieht man ja, wenn man es über den Taskmanager killt, obs geschrieben wird.

Luckie 22. Nov 2007 11:47

Re: Sich gegen KillProcess wehren
 
CloseQuery wird nur aufgerufen, wenn das Fenster geschlossen wird. Der TaskManager beendet aber den Prozess. Und dass man sich nicht dagegen wehren kann ist auch gut so, denn überleg mal, was das für einen Virus bedeuten würde.

Progman 22. Nov 2007 11:53

Re: Sich gegen KillProcess wehren
 
Luckie, das ist richtig, aber ein Log-Eintrag wäre doch bei manchen Anwendungen angebracht. Dass man im Nachhinein sehen kann, ob die Anwendung gekillt wurde.
Ich würde den umgekehrten Weg gehen:
Im CloseQuery immer einen definierten Eintrag ins Log schreiben und wenn beim nächsten Start zwar ein Starteintrag der letzten Sitzung vorhanden ist, aber kein Ende-Eintrag, wurde das Prog nicht normal beendet.
Man muss also gar keine tiefgehenden System-Functionen bemühen ;)

Dezipaitor 22. Nov 2007 12:05

Re: Sich gegen KillProcess wehren
 
Wenn der Prozess nicht geschlossen wird, sondern abgeschossen wird, dann wird der Prozessthread sofort beendet und der Prozessspeicher aus dem Speicher entfernt.
Das einzige was diesen Vorgang aufhalten würde, wäre eine andauernde Hardwareanforderung.

MS hat entschieden, dass der Benutzer die Gewalt über das System hat.

argonix 22. Nov 2007 12:06

Re: Sich gegen KillProcess wehren
 
Wenn man will, kann man auch einen Eintrag in die Ereignisanzeige schreiben. (zur Fehlerdiagnose)
Wie wäre es, wenn man ein 2. Programm startet, das prüft, ob das erste noch läuft und darauf dann reagiert?
(Wenn sowas nicht unsinnig ist für dein Projekt)

sirius 22. Nov 2007 12:15

Re: Sich gegen KillProcess wehren
 
Zitat:

Zitat von argonix
Wenn man will, kann man auch einen Eintrag in die Ereignisanzeige schreiben. (zur Fehlerdiagnose)
Wie wäre es, wenn man ein 2. Programm startet, das prüft, ob das erste noch läuft und darauf dann reagiert?
(Wenn sowas nicht unsinnig ist für dein Projekt)

Genau und wenn sich beide dann gegenseitig starten können und sie die jeweils andere Exe in der Ressource haben, sieht es schon fast wie ein Virus aus :mrgreen:

kalmi01 22. Nov 2007 12:25

Re: Sich gegen KillProcess wehren
 
Zitat:

Zitat von Luckie
dass man sich nicht dagegen wehren kann ist auch gut so

bist Du dir da sicher ?

Delphi-Quellcode:
procedure TForm1.WMQueryEndSession;
  begin
    Msg.Result := 0;

    MachWasSinnvolles;

    Down := true;
    Msg.Result := 1;
  end;

procedure TForm1.WMEndSession;
  begin
    while not Down do Sleep(100);

    Msg.Result := 1;

    Self.Close;
  end;
beendet erst, wenn MachWasSinnvolles fertig ist.

QuickAndDirty 22. Nov 2007 12:26

Re: Sich gegen KillProcess wehren
 
Also ich hab mal nen Watchdog für ne Firma geschrieben der prüfte ob ihre
Programme noch laufen (Prozessliste überwachen).
Das würde ich dir auch empfehlen, dann einfach Loggen wenn DEIN Programm
erscheint oder verschwindet.
Du kannst das ganze dann mit dem Log das im OnCreate und onClose erzeugt wird vergleichen
und hast deine KillProcess angriffe.
Evtl. ist es sogar noch besser nur die process ID deines Programms zu ermitteln
und die WindowsMessageQueue auf KillProcessmessages mit besagter Pid zu überwachen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz