bool DoCreateCharts( RPT_VIEW_MEMBER pMember ) { CString strCommand; strCommand.Format( _T("\"%s\\ChartMaker.exe\" -p \"%s\" -r \"%s\""), CString( get_program_folder( ).string( ).c_str( ) ), GetProjectPathTitle() + ARS_EXTENTION, oProject.GetSPCurrentReport()->GetScreenName() ); GetLastError(); STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); // Start the child process. if( ! CreateProcess( NULL, // No module name (use command line). (LPSTR)(LPCTSTR)strCommand, // 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. ) { CString strErr; strErr.Format( _T("Could not start Chart Maker tool.\nerror: %s"), GetLastErrorStr( ) ); AfxMessageBox( strErr ); } WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); return true; }