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++