Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi!

Hab wieder mal ein Problem:

Wie kann ich einen Prozess (beliebige *.exe) den ich mit CreateProcess() erzeugt hab,

nach bestimmter Zeit killen? (z.B. 1 Minute)

und die verbleibende zeit (bis dieser prozess halt gekillt wird) in einem Textfeld anzeigen??

Hoffentlich könnt ihr mir da helfen!

(ich verwende Visual C++ 6.0 und Programm ist eine dialogfeldbasierende MFC-Anwendung)

Gruß

A.Z.R.A.E.L.

Geschrieben

hi!

das mit dem timer hab ich jetzt schon hinbekommen, nur ich kenn den neuen Prozess nicht killen!


STARTUPINFO sinfo;

PROCESS_INFORMATION pinfo;


ZeroMemory( &sinfo, sizeof(sinfo) );            //keine Ahnung

sinfo.cb = sizeof(sinfo);                               //was diese 3 Zeilen

ZeroMemory( &pinfo, sizeof(pinfo) );           //bedeuten... (Aus Doku abgeguckt...)


if(!CreateProcess(m_SWZielort, NULL, NULL, NULL, FALSE, NULL, NULL, NULL, &sinfo, &pinfo)) 

{

       return;

}


Sleep(1000);


TerminateThread(&pinfo.hThread, GetExitCodeThread(&pinfo.hThread, &pinfo.dwThreadId));

//oder:

TerminateProcess(&pinfo.hProcess, GetExitCodeProcess(&pinfo.hProcess, pinfo.dwProcessId));

//hab beides schon (erfolglos) ausprobiert!

Geschrieben
Original geschrieben von A.Z.R.A.E.L.

TerminateProcess liefert leider False!

GetLastError 0!

Du übergibst bei TerminateProcess die Adresse des Prozess-Handles. Da muss aber das Handle selbst hin:

TerminateProcess(pinfo.hProcess, 0); // ohne &

GetLastError sollte eigentlich 6 (ERROR_INVALID_HANDLE) zurückgeben. Vermutlich hast Du es an der falschen Stelle aufgerufen. Der Aufruf von GetExitCodeProcess an dieser Stelle ist übrigens sinnlos.

Geschrieben

Klotzkopp hat Recht, du mußt das ohne "&" schreiben.

Allerdings mußt du trotzdem den Exitcode übergeben, aber in der Funktion

GetExitCodeProcess auch ohne "&".

Also so:


DWORD dwExitCode;
GetExitCodeProcess(pinfo.hProcess,dwExitCode); //Funktion gibt bool Wert zurück!!!!
//Deshalb nicht in TerminateProcess aufrufen.
TerminateProcess(pinfo.hProcess, dwExitCode);
[/PHP]

Das sollte eigentlich funktionieren, trotzdem

wäre die Funktion [i]ExitProcess[/i] eher empfelenswert wenn der Process

ohne Fehler beendet wird.

Gruß

wasweißich

Geschrieben
Original geschrieben von wasweißich


DWORD dwExitCode;
GetExitCodeProcess(pinfo.hProcess,dwExitCode); //Funktion gibt bool Wert zurück!!!!
//Deshalb nicht in TerminateProcess aufrufen.
TerminateProcess(pinfo.hProcess, dwExitCode);
[/PHP]

Das ist, wie ich bereits sagte, Unsinn. Mit GetExitCodeProcess kann man, [b]nachdem[/b] ein Prozess terminiert ist, dessen Exit-Code abfragen. Vorher wird da nur STILL_ACTIVE herauskommen. Den tatsächlichen Exit-Code setzt man erst durch den Aufruf von TerminateProcess.

[b]Das sollte eigentlich funktionieren, trotzdem

wäre die Funktion [i]ExitProcess[/i] eher empfelenswert wenn der Process

ohne Fehler beendet wird.[/b]

Auch das ist in diesem Fall Unsinn, weil man mit ExitProcess nur den "eigenen" Prozess beenden kann, keine anderen.
Geschrieben

Mit dem Exitcode hast du recht Klotzkopp ich hab das nochmal genau nachgelesen.

Aber das ist egal es klappt auch so, habs nämlich immer so gemacht:D

Zu ExitProcess:

Der Process wurde doch von dem Programm erstellt, also müßte er doch

auch so beendet werden können.

Ich will mich nicht festlegen, ich will nur sagen das ich bisher jeden Process oder Thread

den ich aufgerufen habe mit der Exit anstatt der Terminate Funktion beendet habe und meine

mich erinnern zu können das es einmal mit TerminateProcess nicht geklappt hat, dafür aber

mit ExitProcess.

Gruß

wasweißich

Geschrieben
Original geschrieben von wasweißich

Mit dem Exitcode hast du recht Klotzkopp ich hab das nochmal genau nachgelesen.

Aber das ist egal es klappt auch so, habs nämlich immer so gemacht:D

Habe nie bestritten, dass es nicht klappt. :D

Zu ExitProcess:

Der Process wurde doch von dem Programm erstellt, also müßte er doch

auch so beendet werden können.

Ich will mich nicht festlegen, ich will nur sagen das ich bisher jeden Process oder Thread

den ich aufgerufen habe mit der Exit anstatt der Terminate Funktion beendet habe und meine

mich erinnern zu können das es einmal mit TerminateProcess nicht geklappt hat, dafür aber

mit ExitProcess.

Deine Erinnerung in allen Ehren, aber wie willst Du bei ExitProcess angegeben haben, welcher Prozess beendet werden sollte? ;)
Geschrieben

@wasweißich: habs grad mit ExitProcess versucht... aber da schieß ich grad den Prozess vom Hauptprogramm ab und der neue Prozesse "lebt" weiter!

Hast du vielleicht einen funktionierenden Beispielcode?

@Crush: willst du damit sagen das mir das BS(ich hab Win2K) verbietet den Prozess zu killen den ICH erstellt hab??

hab mir den Quellcode noch nicht ganz durchgelesen, aber sieht so aus als wäre das ziemlich viel aufwand, wenn man nur einen prozess beenden will!

@all: DAS MUSS DOCH IRGENDWIE LEICHTER GEHEN, ODER?????

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...