cmd.exe输入输出重定向问题

joimson 2010-06-28 03:24:07
问题现象:在界面的输入框输入命令。通过管道把命令传送给cmd.exe,执行完后,结果在由管道传送到界面显示。如果是执行
ping,dir,cd等命令时,正常没有问题。当只想calc,write命令时,问题出现了,第一次输入时,没有任何反应,当再次输入时,执行的是第一次输入的命令。如,第一次输入calc不会有反应,当第二次执行行,才蹦出计算器的界面。write命令也是一样。不知是什么原因
...全文
499 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
偶像罗斯福 2010-06-30
  • 打赏
  • 举报
回复
不好确定你的问题,给你一段代码吧,
void function()
{
HANDLE hSTDINWrite, hSTDINRead; // 用于重定向子进程输入的句柄
HANDLE hSTDOUTWrite, hSTDOUTRead; // 用于重定向子进程输出的句柄
SECURITY_ATTRIBUTES sa;

sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
sa.nLength = sizeof(sa);

// 创建子进程输出匿名管道
if( !CreatePipe(&hSTDOUTRead, &hSTDOUTWrite, &sa, 0) )
{
AfxMessageBox("Create STDOUT pipe failed");
return;
}

// 创建子进程输入匿名管道
if( !CreatePipe(&hSTDINRead, &hSTDINWrite, &sa, 0) )
{
AfxMessageBox("Create STDIN pipe failed");
return;
}
(发表于2006-8-27 20:50:00)

robin_fox_nan: PROCESS_INFORMATION pi;
ZeroMemory(&pi, sizeof(pi));
STARTUPINFO si;
GetStartupInfo(&si);

si.cb = sizeof(STARTUPINFO);
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.hStdInput = hSTDINRead; //重定向子进程输入
si.hStdOutput = hSTDOUTWrite; // 重定向子进程输入
si.hStdError = hSTDOUTWrite; //GetStdHandle( STD_ERROR_HANDLE );

char cmd[20] = {0, };
::strcpy(cmd, "c:\\fport.exe");

if( !::CreateProcess(NULL, cmd, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi) )
{
int errorNo = ::GetLastError();
AfxMessageBox("create process failed");
return;
}


(发表于2006-8-27 20:51:00)

robin_fox_nan:::CloseHandle(hSTDOUTWrite);
::CloseHandle(hSTDINRead);

char strData[1024] = {0, };
DWORD dwBytes;
while(::ReadFile(hSTDOUTRead, strData, sizeof(strData), &dwBytes, NULL))
{
strData[dwBytes] = '\0';
SetMessage(strData);
}

::WaitForSingleObject(pi.hProcess, INFINITE);
::CloseHandle(hSTDOUTRead);
::CloseHandle(hSTDINWrite);
::CloseHandle(pi.hProcess);
::CloseHandle(pi.hThread);
}// end of function
blpluto 2010-06-30
  • 打赏
  • 举报
回复
关注~~原来做过这个~
reayi 2010-06-30
  • 打赏
  • 举报
回复
有没有使用/c 然后加参数试试

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧