Search This Blog

Friday, May 22, 2009

MFC code to execute a command exe and read the output


CString ReadReturnValueOfCmdFile(CString csExeName, CString csArguments)
{
   CString csExecute;
   csExecute=csExeName + " " + csArguments;
  
   SECURITY_ATTRIBUTES secattr;
   ZeroMemory(&secattr,sizeof(secattr));
   secattr.nLength = sizeof(secattr);
   secattr.bInheritHandle = TRUE;

   HANDLE rPipe, wPipe;

   //Create pipes to write and read data

   CreatePipe(&rPipe,&wPipe,&secattr,0);
   //

   STARTUPINFO sInfo;
   ZeroMemory(&sInfo,sizeof(sInfo));
   PROCESS_INFORMATION pInfo;
   ZeroMemory(&pInfo,sizeof(pInfo));
   sInfo.cb=sizeof(sInfo);
   sInfo.dwFlags=STARTF_USESTDHANDLES;
   sInfo.hStdInput=NULL;
   sInfo.hStdOutput=wPipe;
   sInfo.hStdError=wPipe;
   char command[1024]; strcpy(command,
           csExecute.GetBuffer(csExecute.GetLength()));

   //Create the process here.

   CreateProcess(0, command,0,0,TRUE,
           NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW,0,0,&sInfo,&pInfo);
   CloseHandle(wPipe);

   //now read the output pipe here.

   char buf[100];
   DWORD reDword;
   CString m_csOutput,csTemp;
   BOOL res;
   do
   {
                   res=::ReadFile(rPipe,buf,100,&reDword,0);
                   csTemp=buf;
                   m_csOutput+=csTemp.Left(reDword);
   }while(res);
   return m_csOutput;
}

No comments: