AGB  ·  Datenschutz  ·  Impressum  







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

Prüfen ob Programm abgestürzt ist

Ein Thema von iDope · begonnen am 5. Dez 2013 · letzter Beitrag vom 10. Dez 2013
Antwort Antwort
Seite 1 von 3  1 23   
iDope

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

Prüfen ob Programm abgestürzt ist

  Alt 5. Dez 2013, 13:49
Hallo zusammen,

Ich möchte ein Programm schreiben, welches ein Programm auf einem, im Netzwerk liegenden, Rechner auf Aktivität prüft.

Die WMI hab ich mir schonmal angeschaut. Hat jemand so etwas ähnliches schonmal gemacht oder hätte evtl Tipps wie oder wo ich diese "Rückmeldung" herbekommen könnte?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Prüfen ob Programm abgestürzt ist

  Alt 5. Dez 2013, 14:05
"Auf Aktivität prüfen" und "Prüfen, ob ein Prozess abstürzt" sind meiner Meinung nach zwei verschiedene Dinge. Was genau?

"Das Programm" das überprüft werden soll kann nicht modifiziert werden, oder?
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#3

AW: Prüfen ob Programm abgestürzt ist

  Alt 5. Dez 2013, 14:06
Ist das zu überprüfende Programm Dein eigenes? Wenn nein, verweise ich auf das Halteproblem. Falls ja, musst Du genau ermitteln, was für Kriterien einem Absturz entsprechen.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
iDope

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

AW: Prüfen ob Programm abgestürzt ist

  Alt 6. Dez 2013, 09:45
Das zu überprüfende Programm ist nicht meines, somit kann es auch nicht modifiziert werden. Es soll überprüft werden ob, das Programm noch arbeitet oder ob es abgesürtzt ist und neu gestartet werden muss.

Vielen Dank (:
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Prüfen ob Programm abgestürzt ist

  Alt 6. Dez 2013, 10:58
Wie definierst du abgestürzt?
1: Ist der Prozess noch aktiv aber das Programm reagiert nicht mehr?
2: Oder ist der Prozess geschlossen?
3: Hat das Programm ein Dienst oder hat es vielleicht sogar ein Hauptfenster welches man dann ansprechen könnte um zu sehen ob das Programm noch reagiert?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Prüfen ob Programm abgestürzt ist

  Alt 6. Dez 2013, 14:02
Besitzt der Prozess ein Fenster könnte man mit SendMessageTimeOut die Nachricht WM_NULL an das Fenster schicken. Oder guck mal hier: http://blogs.msdn.com/b/ntdebugging/...lications.aspx (Detecting and automatically dumping hung GUI based windows applications..) Den Debug-Kram kannst du ja weglassen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
534 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Prüfen ob Programm abgestürzt ist

  Alt 6. Dez 2013, 15:19
Prüfen ob ein fremdes Programm abgestürzt ist - ist absolut unmöglich.
Diesbezüglich haben wir schon Mannmonate investiert und schlussendlich aufgegeben.

Wie oben schon jemand geschrieben hat geht es um die Kriterien. Ist ein Programm abgestürzt wenn:
Wenn nur das Fenster nicht mehr antwortet (Programm reagiert nicht mehr)-
kommt darauf an wie es programmiert ist. Wenn alles im Hauptthread abläuft - vergiss es.

Selbst wenn das Programm oder der Dienst eine Schnittstelle hat und einen Heartbeat sendet.
Was weiss der Überprüfer dann mehr? Nur dass der Heartbeat noch arbeitet.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
iDope

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

AW: Prüfen ob Programm abgestürzt ist

  Alt 6. Dez 2013, 15:27
Okay, vielen Dank. Das SendmessageTimeout funktioniert zumindest mit méinem testprogramm. Ich werde es im lauzfe der nächsten Woche am eigentlichen Programm testen.
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
742 Beiträge
 
#9

AW: Prüfen ob Programm abgestürzt ist

  Alt 6. Dez 2013, 15:52
Schade! Ich hatte schon gehofft, dass hier ein zukünftiger Nobelpreisträger anwesend ist, der eine generelle Lösung anbieten kann.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#10

AW: Prüfen ob Programm abgestürzt ist

  Alt 6. Dez 2013, 19:43
Auf dem lokalen PC kann man eine hängende Anwendung so erkennen:

Delphi-Quellcode:
function IsAppRespondingNT(wnd: HWND): Boolean;
type
  TIsHungAppWindow = function(wnd:hWnd): BOOL; stdcall;
var
  hKernel: THandle;
  IsHungAppWindow: TIsHungAppWindow;
begin
  Result := True;
  hKernel := GetModuleHandle('user32.dll');
  if (hKernel > 0) then
  begin
    @IsHungAppWindow := GetProcAddress(hKernel, 'IsHungAppWindow');
    if Assigned(IsHungAppWindow) then
    begin
      Result := not IsHungAppWindow(wnd);
    end;
  end;
end;

function IsAppResponding(Wnd: HWND): Boolean;
begin
 if not IsWindow(Wnd) then
 begin
   ShowMessage('Incorrect window handle');
 Exit;
 end;
 if Win32Platform = VER_PLATFORM_WIN32_NT then
   Result := IsAppRespondingNT(wnd)
 else
   Result := IsAppRespondingNT(GetWindowThreadProcessId(wnd,nil));
end;
Um das auf einem fremden PC umzusetzen, würde ich auf die Schnelle einen kleinen Dienst schreiben, der periodisch prüft, ob das Programm läuft und dann per TCP, Mail, UDP oder sonstwas Bescheid gibt, das was faul ist.

Käme auf einen Versuch an.

Leider ist die Funktion IsHungAppWindow nur für den internen Gebrauch und vielleicht auch gar nicht mehr so vorhanden.

Ich musste so einen Blödsinn mal schreiben, weil eine Anwendung aufgrund eines schrottigen Treibers manchmal abk*ckte und wir so wenigstens einen KillProcess-Versuch starten konnten. Letztendlich war das alles Blödsinn, aber es hat -soweit ich mich erinnern kann- funktioniert.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:27 Uhr.
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