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 mit

    try{
    ...
    }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


  • Mod

    Hallo

    das ist doch besser im API-Forum aufgehoben
    schau doch da mal

    MfG
    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


Anmelden zum Antworten