![]() |
Prüfen ob Programm abgestürzt ist
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? |
AW: Prüfen ob Programm abgestürzt ist
"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? |
AW: Prüfen ob Programm abgestürzt ist
Ist das zu überprüfende Programm Dein eigenes? Wenn nein, verweise ich auf das
![]() Sherlock |
AW: Prüfen ob Programm abgestürzt ist
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 (: |
AW: Prüfen ob Programm abgestürzt ist
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? |
AW: Prüfen ob Programm abgestürzt ist
Besitzt der Prozess ein Fenster könnte man mit SendMessageTimeOut die Nachricht WM_NULL an das Fenster schicken. Oder guck mal hier:
![]() |
AW: Prüfen ob Programm abgestürzt ist
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. |
AW: Prüfen ob Programm abgestürzt ist
Okay, vielen Dank. Das SendmessageTimeout funktioniert zumindest mit méinem testprogramm. Ich werde es im lauzfe der nächsten Woche am eigentlichen Programm testen.
|
AW: Prüfen ob Programm abgestürzt ist
Schade! Ich hatte schon gehofft, dass hier ein zukünftiger Nobelpreisträger anwesend ist, der eine generelle Lösung anbieten kann. ;)
|
AW: Prüfen ob Programm abgestürzt ist
Auf dem lokalen PC kann man eine hängende Anwendung so erkennen:
Delphi-Quellcode:
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.
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; Käme auf einen Versuch an. Leider ist die Funktion ![]() 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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 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