使用匿名管道接收控制台的程序的输出,在控制台程序没有出现异常的情况下,程序正常.
当控制台程序程序出现异常时,由于将控制台的输出定位到标准错误管道,我如何才能获得控制台输出的错误信息?部分代码如下:
STARTUPINFO si;
PROCESS_INFORMATION pi;  //返回值
ZeroMemory(&si,sizeof(STARTUPINFO));
//GetStartupInfo(&si); 
si.cb = sizeof(STARTUPINFO);
//si.dwFlags =  STARTF_USESTDHANDLES;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
si.hStdError = h_error= GetStdHandle(STD_ERROR_HANDLE);//标准错误管道
si.hStdOutput = hWrite;//所创建进程的输出管道
si.hStdInput =  hRead;//所创建进程的输入管道 
si.wShowWindow = SW_HIDE;//隐藏控制台
//si.wShowWindow = SW_SHOW;//创建进程
if (!CreateProcess(exe_path,
                      "",
                      NULL,
                   NULL,
                   TRUE,
                   0,
                   NULL,
                   NULL,
                   &si,
                   &pi)) {
    CloseHandle(myview->hRead); //读管道
    CloseHandle(myview->hWrite);//写管道
    Read  = NULL;//防止2次关闭
    hWrite = NULL;    MessageBox(创建进程失败","提示",MB_ICONINFORMATION);
return 0;
}
//以下接收错误管道信息
if(PeekNamedPipe(h_error,lpszBuffer,1,&nBytesRead,NULL,0))
{
    if(nBytesRead)
    {
        if (::ReadFile(h_error, lpszBuffer, BUFFER_SIZE,&nBytesRead, NULL) || !nBytesRead)        {
             str_disp = "进程出现异常"; }
    }
}
当进程出错的时候,无法到错误管道的信息?这是什么原因?