?
...CreateProcess ist Dein Freund.
Mit ShellExecute hättest Du noch die Möglichkeit mit Parameter SW_HIDE die Anwendung unsichtbar ablaufen zu lassen, aber auch ShellExecute kehrt sofort zurück. Es gibt glaube ich noch ShellExecuteEx, da musst Du mal im MSDN nachsehen.
Die beste Möglichkeit ist jedoch CreateProcess.
Dort hast Du mit einem Process- u. Threadhandle die Möglichkeit auf den neuen Prozess zuzugreifen und zu warten:
STARTUPINFO si;
PROCESS_INFORMATION pi;
DWORD dwExitCode = -1;
TCHAR cPath[MAX_PATH];
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
memset(&pi, 0, sizeof(pi));
lstrcpy(cPath, pstrCmdLine);
BOOL bSuccess = CreateProcess(NULL, cPath, NULL, NULL, FALSE,
CREATE_NEW_CONSOLE | NORMAL_PRIORITY_CLASS, NULL, pstrCurrDir, &si, &pi);
if (bSuccess)
{
if (!CloseHandle(pi.hThread))
return FALSE;
switch(WaitForSingleObject(pi.hProcess, dwWaitSeconds * 1000))
{
case WAIT_OBJECT_0:
bSuccess = GetExitCodeProcess(pi.hProcess, &dwExitCode);
break;
case WAIT_TIMEOUT:
break;
default:
break;
}
if (bSuccess)
bSuccess = CloseHandle(pi.hProcess);
else
CloseHandle(pi.hProcess);
}
return bSuccess && !dwExitCode;