/* * Copyright (c) 2008 * Shrew Soft Inc. All rights reserved. * * AUTHOR : Matthew Grooms * mgrooms@shrew.net * */ #include #include bool runproc( char * path ) { STARTUPINFO si; memset( &si, 0, sizeof( si ) ); si.cb = sizeof( si ); PROCESS_INFORMATION pi; memset( &pi, 0, sizeof( pi ) ); // Start the child process. if( !CreateProcess( NULL, // No module name (use command line). path, // 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. NULL, // Use parent's starting directory. &si, // Pointer to STARTUPINFO structure. &pi ) ) // Pointer to PROCESS_INFORMATION structure. { return false; } // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Get the exit code DWORD ExitCode; GetExitCodeProcess( pi.hProcess, &ExitCode ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); return ( ExitCode == 0 ); } int APIENTRY WinMain( HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { FILE * fp; if( fopen_s( &fp, lpCmdLine, "r" ) ) return -1; while( true ) { char cmd[ MAX_PATH ]; memset( cmd, 0, MAX_PATH ); if( fgets( cmd, MAX_PATH, fp ) == NULL ) break; char * term = strchr( cmd, '\n' ); if( term != NULL ) *term = 0; if( !runproc( cmd ) ) return -2; } return 0; }