Warten bis Process zuende
-
Hallo Forum,
ich möchte dem User eine Anwendung zeigen und mit meinem Programm erst fortfahren bis diese beendet wurde. Im Web habe ich schon einiges gefunden, darunter auch aus diesem Forum (http://www.c-plusplus.net/forum/viewtopic-var-t-is-236041.html), ich komme jedoch nicht weiter:
// Startet einen Task. // Path: Pfad zur Anwendung // WithTermination: Beendet ggf die gestartete Anwendung wenn MaxZeit überschritten. // WaitForTermination: Warten bis Programm beendet oder MaxZeit erreicht. void StartTask(char *Path, int WithTermination, int WaitForTermination) { STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si, 0 ,sizeof(si)); si.cb= sizeof(si); si.wShowWindow = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWDEFAULT; memset(&pi, 0 ,sizeof(pi)); CreateProcess( NULL, Path, NULL, NULL, FALSE, CREATE_DEFAULT_ERROR_MODE | NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi); int retval=0; if (WaitForTermination==TRUE) { retval = WaitForSingleObject(pi.hProcess, 10000); } // Beendet ggf den gestarteten Task: if (WithTermination) { CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } }Meine Problem ist das WaitForSingleObject() immer 0 zurückgibt.
-
GetLastError() & FormatMessage() = ?
-
Ich habe jetzt diese Zeilen eingefügt:
char errBuf[1000]; memset(&errBuf, 0 ,sizeof(char)*1000); int dwError = GetLastError(); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)errBuf,0,NULL); MessageBox(NULL, (LPCTSTR)errBuf, NULL, MB_OK);Die zu startende Anwendung startet normal, dwError==0 und in der Messagebox steht gar nichts.
-
msdn:
WAIT_OBJECT_0 0x00000000L The state of the specified object is signaled
wo ist also dein problem?
-
Der Wartezeitraum in WaitForSingleObject() ist 10 Sekunden. Aber egal ob ich das gestartete Programm in der Zeit offen lasse oder schließe retval ist immer 0 und bei WaitForSingleObject() wird auch nicht 10 Sekunden gewarte. (So habe ich jedenfalls WaitForSingleObject verstanden.)