craziscoth Posted November 14, 2005 Posted November 14, 2005 trying to launch a separate executable and redirect the output to another file for parsing. ive looked in msdn and the sample they give doesn't seem to work with the environment i have. don't know if im missing something.here is the code i haveint LaunchProcess(LPTSTR programName, LPTSTR commandLine, BOOL wait_flag, const _TCHAR *curDir = NULL, const _TCHAR *redirOut = NULL){ PROCESS_INFORMATION pi; STARTUPINFO si; DWORD dwExitCode = 0; DWORD dw; DWORD last_error; BOOL fSuccess; BOOL fExit; DWORD create_flags; HANDLE hFileout = NULL; SECURITY_ATTRIBUTES saAttr; int return_status; ZeroMemory(&si, sizeof(STARTUPINFO)); if (redirOut != NULL) { saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); saAttr.bInheritHandle = TRUE; saAttr.lpSecurityDescriptor = NULL; hFileout = CreateFile(redirOut , FILE_WRITE_DATA , FILE_SHARE_WRITE , &saAttr //security attributes , OPEN_ALWAYS , FILE_ATTRIBUTE_NORMAL , NULL); if (!hFileout == INVALID_HANDLE_VALUE) { si.dwFlags = STARTF_USESTDHANDLES; si.hStdOutput = hFileout; si.hStdError = hFileout; } } if( wait_flag ) { create_flags = 0; } else { create_flags = CREATE_NEW_CONSOLE; } // SETUP STARTUP INFORMATION STRUCTURE: si.cb = sizeof(STARTUPINFO); si.lpReserved = NULL; si.lpDesktop = NULL; si.lpTitle = programName; si.cbReserved2 = 0; si.lpReserved2 = NULL; GetStartupInfo( &si ); if( ! wait_flag ) // IF WE DO NOT WAIT - RUN MINIMIZED { si.dwFlags = si.dwFlags | STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWMINIMIZED; } fSuccess = CreateProcess( programName, commandLine, (LPSECURITY_ATTRIBUTES) NULL, /* Process security */ (LPSECURITY_ATTRIBUTES) NULL, /* Thread Security */ (BOOL) TRUE, /* Inherit handles */ (DWORD) create_flags, /* Create Flags */ NULL, /* Environment: */ curDir, /* Current Dir */ (LPSTARTUPINFO) &si, /* Startup info */ (LPPROCESS_INFORMATION) π ); /* Process info */ if( fSuccess != 0 ) // SUCCESS IF != 0 { dwExitCode = 0; /* WAIT FOR TASK TO COMPLETE (NO_TIMEOUT): */ if(wait_flag) { dw = WaitForSingleObject(pi.hProcess, INFINITE ); // WAS PROCESS RUN SUCCESSFULLY: fExit = GetExitCodeProcess(pi.hProcess, &dwExitCode ); return_status = dwExitCode; CloseHandle(pi.hThread); CloseHandle(pi.hProcess); pi.hThread = 0; pi.hProcess = 0; } // END WAIT - SAVE THE EXIT CODE FROM PROGRAM } else /* CREATE PROCESS FAILED */ { last_error = GetLastError(); return_status = -1; } if (hFileout) CloseHandle(hFileout); return( return_status );}the function here is compiled and built into a dll. i dont know if it being in a dll is any cause for it to not work or not.plz help.thanx
craziscoth Posted November 16, 2005 Author Posted November 16, 2005 Well, since no one else has responded. I found the problem.I was calling GetStartupInfo(&si) and overwriting the information I had set for redirecting the output.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now