使用匿名管道接收控制台的程序的输出,在控制台程序没有出现异常的情况下,程序正常.
当控制台程序程序出现异常时,由于将控制台的输出定位到标准错误管道,我如何才能获得控制台输出的错误信息?部分代码如下:
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 = "进程出现异常"; }
}
}
当进程出错的时候,无法到错误管道的信息?这是什么原因?
当控制台程序程序出现异常时,由于将控制台的输出定位到标准错误管道,我如何才能获得控制台输出的错误信息?部分代码如下:
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 = "进程出现异常"; }
}
}
当进程出错的时候,无法到错误管道的信息?这是什么原因?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货