Revision: 13845
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at May 7, 2009 15:42 by jimfred
Initial Code
static void MyExec( LPCSTR cmdArg, LPCSTR cwdArg ) { STARTUPINFO si = {sizeof(STARTUPINFO)}; PROCESS_INFORMATION pi = {0}; BOOL bOk = CreateProcess( NULL, // No module name (use command line) (LPSTR)cmdArg, // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE 0, // No creation flags NULL, // Use parent's environment block (LPSTR)cwdArg, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure &pi // Pointer to PROCESS_INFORMATION structure ); // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); if ( bOk ) { return; } CString s; s.Format( "Unable to execute '%s'", cmdArg ); MessageBox( NULL, s, APP_NAME, 0 ); exit(-1); }
Initial URL
Initial Description
I occasionally need a WinExec function the synchronously executes a command. cwdArg may be null. This example, upon error, pops-up a dialog and exits the app. This is useful for small installation utilities. non-dot.net, with or without MFC.
Initial Title
MyExec, calls CreateProcess, waits for completion. WinBase
Initial Tags
windows
Initial Language
C++