Einzelnen Beitrag anzeigen

Furtbichler
(Gast)

n/a Beiträge
 
#10

AW: Prüfen ob Programm abgestürzt ist

  Alt 6. Dez 2013, 18: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