Programm abschiessen
-
Hey zusammen!
Ich habe einen Anti-Spam Service programmiert (http://spam.n-dream.com) mit bcb6
Bei diesem Antispam Service hat es auf einem Server eine Hauptapplikation die andere EXEs startet. Es müssen immer 6 Exes laufen.
Zwischendurch stürzt aber einmal eine EXE ab.
ich habe alle codes mittry{ ... }catch(...) {Application->Terminate();}
versehen.
Wenn nun ein EXE abtürzt und sich beendet, dann merkt dass das hauptprogramm und startet sie neu.Nun passiert es aber manchmal dass eine EXE einfach nicht mehr reagiert. Aber auch nicht abstürzt!?
(Wenn man dann ins fenster klickt, wird man gefragt ob man den Task beenden will.)Kennt jemand einen Weg wie ich checken kann ob eine EXE noch reagiert, und falls nicht sie zu killen???
Danke
Andrin von Rechenberg, N-Dream
-
Hallo
das ist doch besser im API-Forum aufgehoben
schau doch da malMfG
Klaus
-
Folgendes habe ich gefunden, aber ich habe keine ahnung wie ich die PID herausfinde. Gibts nicht eine einfachere lösung.
Ich kann herausfinden ob das EXE noch läuft. Wie schiesse ich es ab, falls es nicht läuft?HANDLE hProc; DWORD dwRet; // If we can't open the process with PROCESS_TERMINATE rights, // then we give up immediately. hProc = OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE, pID); if(hProc == NULL) return TA_FAILED; // TerminateAppEnum() posts WM_CLOSE to all windows whose PID // matches your process's. EnumWindows((WNDENUMPROC)TerminateAppEnum, (LPARAM)pID); // Wait on the handle. If it signals, great. If it times out, // then you kill it. if(WaitForSingleObject(hProc, dwTimeout)!=WAIT_OBJECT_0) dwRet=(TerminateProcess(hProc,0)?TA_SUCCESS_KILL:TA_FAILED); else dwRet = TA_SUCCESS_CLEAN; CloseHandle(hProc);
-
Habe jtzt ein kleines Prog gecoded, dass die mausklickst einfach simuliert (inkl "Task beenden")...
Zwar nicht sauber, aber es tut den Zweck...
:p
Greez N-Dream