AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Prüfen ob Programm abgestürzt ist
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen ob Programm abgestürzt ist

Ein Thema von iDope · begonnen am 5. Dez 2013 · letzter Beitrag vom 10. Dez 2013
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.043 Beiträge
 
Delphi 12 Athens
 
#1

AW: Prüfen ob Programm abgestürzt ist

  Alt 8. Dez 2013, 08:48
Wie oft hatte ich das schon, das Windows 7 behauptet hat, ein Programm reagiere nicht mehr....
Manchma war es sogar von der gleichen Software Schmiede...
dann einfach noch ein bisschen gewartet... und hoppla es lief ja doch.
Das sind zwei verschiedene Sachen. Windows prüft ausschließlich, ob das Programm noch reagiert. Und da ist die Meldung auch absolut korrekt, wenn ein Programm nicht mehr reagiert. Das ist auch das Störende für den Bediener.

Wenn hingegen ein Programm länger läuft und dabei korrekterweise noch auf die GUI reagiert (Threads), erkennt Windows auch nicht, wenn der Vorgang an sich "abstürzt". Eben weil eine solche Absturzerkennung nicht möglich ist.

Ein Hängen im Sinne von nicht reagieren kann man jedenfalls einfach über die glaube ich schon genannte API Funktion herausfinden. Damit erkennt man das gleiche wie Windows selbst auch anzeigt. Wobei ich das mittlerweile nur noch bei wenigen kleineren Softwaretools als Problem habe. Die größeren Programme sind da besser und reagieren auch bei längeren Vorgängen noch.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Prüfen ob Programm abgestürzt ist

  Alt 8. Dez 2013, 09:04
Hallo,

Da es ein fremdes Programm ist,
was zusätzlich auch noch im Netz läuft,
definiere ich "abgestürzt" einfach mit
"erfüllt seine Funktion nicht mehr so wie erwartet".

Das prüfe ich 5mal im Abstand von 1 Minute
und schieße es dann ab.

Heiko
Heiko
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: Prüfen ob Programm abgestürzt ist

  Alt 8. Dez 2013, 09:50
...und schieße es dann ab....
... und starte es dann neu?

Leider kann man nicht jedes Programm 'abschießen', vor allen Dingen gerade die, die 'hängen'.

Aber wenigstens hast Du das für dich definiert und hier kundgetan: Alle anderen reden nur um den heißen Brei herum
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: Prüfen ob Programm abgestürzt ist

  Alt 8. Dez 2013, 11:17
Leider kann man nicht jedes Programm 'abschießen', vor allen Dingen gerade die, die 'hängen'.
Wohl nicht auf die Weise, die der Taskmanager unter "Anwendungen" als "Task beenden" anbietet. Das ist nach meinem Wissen nicht mehr als eine an das Progremm verschickte Beenden-Bitte. Programme, die sich verschließen, werden darauf demnach nicht anders als "verzickte" Menschen reagieren. Besser ist schon "Prozess beenden" unter dem Reiter "Prozesse", das beruht m.E. auf TerminateProcess. Besonders groß dürfte die Erfolgsaussicht sein, wenn man das mit erweiterten Prviilegien tut (erfordert Administratorrechte). Mein Programm "Prozesse" (auch in diesem Forum unter "Prozeßbetrachter" zu finden) demonstriert das.

Allerdings stößt auch TerminateProcess irgendwann an seine Grenzen, und zwar bei Diensten und den "besonders systemnahen Prozessen".

Ergänzung: "Besonders systemnahe Prozesse" setzte ich deshalb in Anführungsstriche, weil mir noch ein glanzvoller Beitrag von Assarbad "im Hinterkopf" bekannt und bewußt war, den ich nun wiederfand: http://www.delphipraxis.net/1057551-post10.html

Geändert von Delphi-Laie ( 8. Dez 2013 um 19:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.505 Beiträge
 
Delphi 12 Athens
 
#5

AW: Prüfen ob Programm abgestürzt ist

  Alt 8. Dez 2013, 11:24
Allerdings stößt auch ProcessTerminate irgendwann an seine Grenzen, und zwar bei Diensten.
Nur wenn da die nötigen Rechte fehlen. (Anwender/Taskmanager = Benutzer und Dienst ist Systemdienst)

Aber bei hängenden Treibern (nicht User-Mode-Treibern) wartet ProcessTerminate auch gern auf den Treiber.



Also:
- Windows prüft nur, ob die GUI hängt, aber kann nicht prüfen ob das Programm hängt

- was "Hängen" ist, muß je nach Anwendung/Funktion/Verwendung entsprechend definiert werden

- es ist nicht immer möglich auf das "Hängen" zu prüfen

- praktisch kann man nur regelmäßig versuchen eine "Aktion" auszulösen und deren "Ergebnis" auswerten, um das "Hängen/Funktionieren" prüfen zu können,
aber auch das ist nicht immer ein sichere Prüfmethode (z.B. Funktionsaufruf geht, das Ergebnis ist valide, aber es stimmt nicht "mehr", weil eine Aktualisierungsroutine hängt)

- usw.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.043 Beiträge
 
Delphi 12 Athens
 
#6

AW: Prüfen ob Programm abgestürzt ist

  Alt 8. Dez 2013, 11:43
Wohl nicht auf die Weise, die der Taskmanager unter "Anwendungen" als "Task beenden" anbietet. Das ist nach meinem Wissen nicht mehr als eine an das Progremm verschickte Beenden-Bitte.
Aber danach wird auch angeboten das Programm hart zu beenden, wenn es auf die Message mit der Anforderung nicht reagiert. Deshalb ist der Weg schon der sinnvollste, wenn man nicht zu 100% sicher ist, dass das Programm ohnehin nicht reagieren wird. Denn wenn es doch noch darauf reagiert und nur die GUI gerade eingefroren ist, wird es dann sanft beendet und kann dabei aufräumen.

Hart beenden sollte man nur, wenn der sanfte Weg nicht klappt.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#7

AW: Prüfen ob Programm abgestürzt ist

  Alt 8. Dez 2013, 19:19
Leider kann man nicht jedes Programm 'abschießen', vor allen Dingen gerade die, die 'hängen'.
:::Besser ist schon "Prozess beenden" unter dem Reiter "Prozesse", das beruht m.E. auf TerminateProcess. Besonders groß dürfte die Erfolgsaussicht sein, wenn man das mit erweiterten Prviilegien tut (erfordert Administratorrechte)....
Witzbold Wenn ich sage 'geht nicht', dann meine ich natürlich auch 'geht nicht'. Weder mit Adminrechten, noch als Prozess, noch sonstewie.

Aber bei hängenden Treibern (nicht User-Mode-Treibern) wartet ProcessTerminate auch gern auf den Treiber.
Und wenn der Treiber schrott ist, dann wartet ProcessTerminate eben bis in alle Ewigkeit => 'geht nicht'
  Mit Zitat antworten Zitat
iDope

Registriert seit: 5. Dez 2013
11 Beiträge
 
#8

AW: Prüfen ob Programm abgestürzt ist

  Alt 10. Dez 2013, 11:02
Okay, das ist ja ein ziemlich heikles Thema was ich hier angestoßen habe.
Und wie das hier aussieht ist genau das was ich vor hatte gar nicht bzw nicht in diesem Ausmaß möglich, wenn ich mir hier die Kommentare durchlese.
Trotzdem vielen Dank für eure Hilfe, ich versuche eine andere Lösung des Problems zu finden.
Falls jemand jedoch eine Lösung, die mein Problem behebt, findet, die eventuell noch nicht angesprochen wurde, wäre es nett diese hier zu posten (:

MfG
iDope
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 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