Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Terminateprocess()

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
28.02.2003, 16:02 Uhr
Uli



Hallo,

in meinem Programm beende ich mit


C++:
proc_to_kill = OpenProcess(NULL, FALSE,ProcessList.th32ProcessID );
TerminateProcess(proc_to_kill, 0);



bestimmte Processe. im Normalfall geht das auch ohne sorgen. Nun kommt es aber immer mal wieder dazu das nicht nur der Process beendet wird sondern der ganze PC sich aufhängt. Da kommt ein kleiner blauer BS und danach fährt das System neu hoch. Habe ich vergessen etwas zu beachten oder kann es einfach an dem Programm liegen das ich beenden?

Bye Uli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.02.2003, 17:51 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
das passiert bei mir seltsamerweise bei Threads, da hängt sich nicht der komplette pc auf sondern "nur" das Programm und hab leider keine Ahnung woran das liegen könnte!
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
01.03.2003, 14:26 Uhr
Uli



Hallo,

also bei mir startet es gleich den ganzen Rechner neu. Wi könnte ich einen Process mit ExitProcess beenden. Ich übergebe den ExitCode aber wie sage ich ihm um welchen Process es geht?

Bye
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
01.03.2003, 15:20 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


normalweise hat man das Prozesshandle ja von CreateProzess/OpenProcess
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.03.2003, 11:10 Uhr
~Uli
Gast


Hallo,

da ich den Process nicht immer elber strte habe ich das Handle nicht. so besorge ich es mir über OpenProcess. Damit habe ich ein Handle. Nun besorge ich mir noch mit GetExitCodeProcess den Wert für ExitProcess.


C++:
HANDLE    proc_to_kill;
proc_to_kill =
OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessList.th32ProcessID );
GetExitCodeProcess(proc_to_kill,&lpExitCode);
ExitProcess(lpExitCode);



und schon habe ich mein eigene Programm beendet aber nicht das was beendet werden soll.

Wo liegt mein fehler??

Bye
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.03.2003, 11:51 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo,
GetExitCodeProcess liefert nur einen ExitCode wenns den Prozess gar nicht mehr gibt! ansonsten kommt STILL_ACTIVE...

Der Exitcode den man bei TerminateProcess angibt (du killst oben deinen eigenen Process) muss man selber angeben. (also z.b. 0 für Kein Fehler, 1 für Fehler, oder was auch immer)

Z.B.:

C++:
HANDLE proc_to_kill = OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessList.th32ProcessID );
TerminateProcess(proc_to_kill, 0);


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.03.2003, 21:19 Uhr
~Uli
Gast


Hallo Drachenreiter,

Danke für dein posting. Deinen geschrieben Quellcode verwende ich schon. mit dem kommt es ja immer zu den abstürzen die ich verhindern will. Ich erkenne aber auch kein Muster in den abstürzen. Auf zwei identischen Rechner (Hard & Soft) gibt es auf einem die Problemem und auf dem anderen nicht. Also ich kann keinen grund zuordnen.
Weitere möglichkeiten zum Beenden von Processen ist mir nicht bekannt.

ByeUli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.03.2003, 08:02 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hast du vielleicht im Projektformat ... *such* ...

"Use of MFC" auf "Use MFC in a shared Dll"

und

"Runtime Library" auf "Multi Threaded Debug" (bzw "Single Threaded Debug") und nicht auf "Multi Threaded Debug DLL" das war bei mir mal so das da dann das Programm gesponnen hat.

Oder probier mal komplette neukompilierung, bei Programmen mit extra Threads spinnt das minimal rebuild manchmal...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
04.03.2003, 08:03 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Achja, falls du nicht weiterkommst schick mir das Projekt (ohne Debug&Releaseordner) an die angegebene Email! Dann schau ichs mir mal an, vielleicht hast du irgendwo einen versteckten fehler drin...
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.03.2003, 18:48 Uhr
Uli



Hallo,

das schicken vom Code geht natürlich. Du könntest ihn dir aber nur anschauen. zum ausführen müssen viele Bedingungen erfüllt sein und das ist nicht mal auf meinem rechner der fall. Ich poste hier einfach mal die Funktion wo die Probeme auftretten.


C++:
//***************************************************
//*            Beenden eines Processes           *
//***************************************************
bool CHelp::EndProcess(CString ProgToEnd)
{    
    CString Hilfe;
    if(ProgToEnd.Find(' ') != -1)
        ProgToEnd=ProgToEnd.Left(ProgToEnd.Find(' '));
    Hilfe  =ProgToEnd.Left(ProgToEnd.ReverseFind('\\')+1);
    ProgToEnd=ProgToEnd.Right(ProgToEnd.GetLength()-Hilfe.GetLength());
    
    HANDLE                SnapShot;
    HANDLE                proc_to_kill;
    PROCESSENTRY32        ProcessList;
    ProcessList.dwSize  =sizeof (PROCESSENTRY32);
    
    SnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    if(Process32First(SnapShot, &ProcessList) == FALSE)
    {
        Hilfe.Format("%d",GetLastError());
        MessageBox(Hilfe);
        MessageBox("Error reading process list\n");
        CloseHandle(SnapShot);
        return NULL;
    }
    do
    {
        if(Process32Next(SnapShot, &ProcessList) == FALSE)
        {
            if(GetLastError() != ERROR_NO_MORE_FILES)
            {
                MessageBox("Error reading process list\n");
                CloseHandle(SnapShot);
                CloseHandle( proc_to_kill );
                return NULL;
            }
            else
            {
                CloseHandle(SnapShot);
                CloseHandle( proc_to_kill );
                return NULL;
            }
        }
        if( ProgToEnd.CompareNoCase(ProcessList.szExeFile)==0)
        {
            proc_to_kill = OpenProcess
                       (PROCESS_ALL_ACCESS, FALSE,ProcessList.th32ProcessID );
            TerminateProcess(proc_to_kill, 0);
//            
//            ExitProcess(proc_to_kill->GetExitCode());
        }
    }while(1);

    return NULL;
}



Der Rechner hängt sich immer nur auf wenn dise Funktion aufgerufen wird.

Bye Uli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: