![]() |
Anwendung 100%ig garantiert beenden (lassen)?
Hallo Leute,
Ich habe hier eine Anwendung, die beim Beenden manchmal im Speicher hängen bleibt. Das liegt an einer DLL, die offenbar schlampig programmiert ist. Manchmal bleibt also die Anwendung im Speicher kleben. Da sie als "Singleton-EXE" umgesetzt ist, d.h. nur einmal gestartet werden kann, blockiert diese Leiche alle Versuche, die Anwendung neu zu starten (logisch, sie ist ja noch 'da'). Ich habe also diverse Dinge probiert, u.a. schickt die Anwendung einer anderen EXE (=der Wächter) eine Message, die daraufhin mit Killprocess versucht, das Teil zu entfernen. Klappt nicht immer. Das blöde Ding will manchmal auch über den Taskmanager nicht weichen. Da hilft dann nur "abmelden", wobei Windows es irgendwie hinbekommt, das Teil entgültig zu vernichten. Meine Fragen: 1. Gibt es eine 'best practice', um mit DLLs umzugehen? z.b. nicht statisch (eh blöd), kontrollierter Shutdown (d.h. die DLL entladen) usw. 2. Gibt es eine 100% sichere Möglichkeit eine EXE aus dem Speicher zu entfernen? 3. Wie schafft Windows es beim Abmelden / Runterfahren, jede EXE aus dem Speicher zu kicken. Welche API-Funktion ist das (außer "Shutdown" ;-) ) 4. Wenn ich die Anwendung in der Delphi-IDE ausführe und sie mal wieder bockig ist, schafft Delphi das mit Strg-F2. Was steckt dahinter? |
AW: Anwendung 100%ig garantiert beenden (lassen)?
Probier mal den Prozess mit dem pskill von SysInternals zu entfernen, evtl. schafft der das.
Warum Windows das beim Abmelden schafft (oder auch der Debugger von Delphi) liegt wohl darin begründet, dass dort beim Beenden dem Prozess die Grundlage entzogen wird, also der Ast abgesägt wird, auf dem der sitzt :) |
AW: Anwendung 100%ig garantiert beenden (lassen)?
Vielleicht hilft es, wenn du eine Art Wrapper-Anwendung um die eigentliche Exe legst, die diese mit CreateProcess zum Leben erweckt. Als Owner dieses Prozesses müsste man den mit TerminateProcess eigentlich immer beendet bekommen.
|
AW: Anwendung 100%ig garantiert beenden (lassen)?
Zitat:
Zitat:
Zitat:
![]() Zitat:
Wenn es dir um die EXE als Abbild für den Prozeß geht, dann reicht einfaches Beenden des Prozesses. Schließen des zugehörigen Fensters reicht nicht immer ... Zitat:
Zitat:
|
AW: Anwendung 100%ig garantiert beenden (lassen)?
Viele Köche verderben eben den Brei. Die Frage, ob eine bereinigte Version der DLL zu bekommen ist, wage ich gar nicht erst zu stellen.
Kann man das Programm nicht mit Debugprivilegien wahrscheinlicher beenden? Ich habe keine Ahnung, ob die nur "von außen" möglich sind, oder ob das Programm selbst mit solchen Privilgien sich wahrscheinlicher selbst beenden kann, ist nur so eine Idee von mir. |
AW: Anwendung 100%ig garantiert beenden (lassen)?
Zitat:
Zitat:
|
AW: Anwendung 100%ig garantiert beenden (lassen)?
Zitat:
Zitat:
|
AW: Anwendung 100%ig garantiert beenden (lassen)?
Es kann sich auch lohnen die aktuellen Warteschlangen anzuschauen um herauszufinden, ob es nur ein Deadlock oder so ist. Denn in so einem Fall könnte man (wie es auch Windows 7 anbietet, wenn es das bei einem Prozess erkennt) den Deadlock auflösen und dem Prozess so die Beendigung ermöglichen.
Typisch sind solche Fehler bei Verwendung von Threads, z.B. mit den Indy Komponenten. Die Warteschlangen kannst du am einfachsten (aber nicht vollständig) über den Process Explorer sehen und auch Delphi bringt entsprechende Möglichkeiten im Thread-Fenster mit. |
AW: Anwendung 100%ig garantiert beenden (lassen)?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 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