Assuming Windows (as this is the only platform where this behavior is endemic):
CreatePipe () to create the pipes necessary for communication, and CreateProcess to create a child process.
HANDLE StdInHandles[2]; HANDLE StdOutHandles[2]; HANDLE StdErrHandles[2]; CreatePipe(&StdInHandles[0], &StdInHandles[1], NULL, 4096); CreatePipe(&StdOutHandles[0], &StdOutHandles[1], NULL, 4096); CreatePipe(&StdErrHandles[0], &StdErrHandles[1], NULL, 4096); STARTUPINFO si; memset(&si, 0, sizeof(si)); si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = StdInHandles[0]; si.hStdOutput = StdOutHandles[1]; si.hStdError = StdErrHandles[1]; PROCESS_INFORMATION pi; CreateProcess(AppName, commandline, SECURITY_ATTRIBUTES, SECURITY_ATTRIBUTES, FALSE, CREATE_NO_WINDOW |DETACHED_PROCESS, lpEnvironment, lpCurrentDirectory, &si, &pi);
This should help you do more that you want to accomplish.
Chris k
source share