您的位置:首页 > 其它

通过管道执行cmd命令

2015-09-14 17:10 197 查看
string ExeCmd(const char * pszCmd)

{

//创建匿名管道

SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, TRUE};

HANDLE hRead, hWrite;

if (!CreatePipe(&hRead, &hWrite, &sa, 0))

{

return "";

}

//设置命令行进程启动信息(以隐藏方式启动命令并定位其输出到hWrite)

STARTUPINFO si = {sizeof(STARTUPINFO)};

GetStartupInfo(&si);

si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;

si.wShowWindow = SW_SHOW;//SW_HIDE;

si.hStdError = hWrite;

si.hStdOutput = hWrite;

//启动命令行

PROCESS_INFORMATION pi;

if (!CreateProcess(NULL, (char *)pszCmd, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))

{

return "";

}

//立即关闭hWrite

CloseHandle(hWrite);

//读取命令行返回值

std::string strRet;

char buff[1024] = {0};

DWORD dwRead = 0;

while (ReadFile(hRead, buff, 1024, &dwRead, NULL))

{

strRet.append(buff, dwRead);

}

CloseHandle(hRead);

return strRet;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: