Auf Programmende warten!! Bitte helfen....
-
Hallo,
ich möchte in meinem C Programm mit
system("c:\blabla.exe");
ein Programm starten, leider Wartet mein Programm nicht darauf das es fertig ist.
Wie kann ich das machen, das es abfragt ob das Programm zuende gelaufen ist.Ich danke schon mal
Gruss trivial
-
Hallo
Also ich würde eher "ShellExecute" anstatt "system" nehmen
trivial schrieb:
Wie kann ich das machen, das es abfragt ob das Programm zuende gelaufen ist.
Wie meinst du das?
-
Also ich will das mein c Programm, auf das Programm was ich in der Shell startet, wartet. Das tut es jetzt nämlich nicht.
Kann ich nicht eine schleife mache, wo der Prozess abgefragt wird?Danke für deine hilfe
-
Hallo,
Da hilft dann eher ShellExecuteEx. Dazu gibts einige Beiträge im WinAPI-Forum.
z.Bsp. den
http://www.c-plusplus.net/forum/viewtopic-var-t-is-109978.html
-
Afaik wartet system(), bis das aufgerufene Programm fertig ist - schon um dessen Rückgabe auswerten zu können.
Ansonsten könntest du auch ShellExecuteEx() verwenden, um ein anderes Programm zu starten, die gibt auch ein HINSTANCE des gestarteten Programms zurück, mit dem du weiterarbeiten kannst.
-
weißt du, wie ich eine winapi funktion einbinden?
als beispiel jetzt die ShellExecuteEx
-
@CStoll (off)
also ich habe System() versucht und es wartet nicht bis es fertig ist.
Hast du ein anderen Tipp?
-
Hallo,
ich habe das jetzt mal so versucht,
----------------------------------------
SHELLEXECUTEINFO ExecInfo;
ExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ExecInfo.hwnd = GetActiveWindow();
ExecInfo.lpVerb = "open";
ExecInfo.lpFile = "c:/Programme/tool/Remover.exe";
ExecInfo.nShow = SW_SHOW;
ExecInfo.hInstApp = NULL;
ShellExecuteEx(&ExecInfo);
WaitForSingleObject(ExecInfo.hProcess, 3600);leider wartet der immern noch nicht auf das ende des remover tools.

Wo liegt mein Fehler ?
danke
-
kann mir denn einer helfen?
-
char *pcPrg = "c:\\Programme\\tool\\Remover.exe"; STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); CreateProcess( NULL, pcPrg, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ); for (;;) { if ( WaitForSingleObject( pi.hProcess, 0 ) == WAIT_OBJECT_0) { break; } }
-
@luxx
hi leider hat das auch nicht funktioniert.
Ich glaube das remover tool erstellt ein Child Prozess und danach schliesst es sich und dann ist das, was im C Programm geöffnet worden ist, zuende.
Ich brauche was, was z.B. den Taskmanager überprüft, ob die remover.exe noch geöffnet ist. Geht das, weil im Task manager wird die die ganze Zeit angezeigt.Danke Gruss Trivial
-
hallo keiner ne idee?
-
Ich denke diese Frage ist eher ein Fall für das WinAPI-Forum.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Creating processes:
http://msdn.microsoft.com/library/en-us/dllproc/base/creating_processes.asp