mfc 执行命令

BOOL EI_bExcuteCMD(char *pcCmd)
{
CFile fp;
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
    CString strData;

// 建立匿名管道
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead, &hWrite, &sa, 1024))
    {
OutputDebugString("Error On CreatePipe()\n");
return FALSE;


// 建立进程,并继承管道输出
STARTUPINFO si;
PROCESS_INFORMATION pi; 
ZeroMemory( &si, sizeof(si) );
ZeroMemory( &pi, sizeof(pi) );
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si); 
// si.hStdInput  = GetStdHandle( STD_INPUT_HANDLE );
//  si.hStdError  = GetStdHandle( STD_ERROR_HANDLE );
si.hStdError   = hWrite;
si.hStdOutput  = hWrite;
si.wShowWindow = SW_SHOW;
si.dwFlags     = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;


    if (!CreateProcess(NULL, pcCmd,NULL,NULL,TRUE, CREATE_NO_WINDOW,NULL,NULL,&si,&pi))//CREATE_NEW_CONSOLE | 
    {
OutputDebugString("Error on CreateProcess()\n");
return FALSE;
}

//超时时间5秒
CString sTemp;
DWORD lpExitCode;
sTemp.Format("%s", pcCmd);

if (WaitForSingleObject(pi.hProcess, 5000) == WAIT_TIMEOUT)
{
//进程还在的话强制退出
GetExitCodeProcess (pi.hProcess, &lpExitCode);
if (lpExitCode == STILL_ACTIVE)
{
lpExitCode= TerminateProcess(pi.hProcess, 0);
}
return FALSE;
}

//进程还在的话强制退出
GetExitCodeProcess (pi.hProcess, &lpExitCode);
if (lpExitCode == STILL_ACTIVE)
{
lpExitCode= TerminateProcess(pi.hProcess, 0);
}

return TRUE;
}

猜你喜欢

转载自blog.csdn.net/sspdfn/article/details/52369868