我正在使用CreateProcess()从我的GUI应用程序在
Windows中运行外部控制台应用程序.我想以某种方式收集输出,以了解是否有错误.现在我知道我必须用hStdOutput做一些事情,但我不明白是什么.我是c和一个没有经验的程序员的新手,我实际上不知道如何处理手柄或如何点亮管道.
这就是我现在所拥有的:
void email::run(string path,string cmd){ WCHAR * ppath=new(nothrow) WCHAR[path.length()*2]; memset(ppath,' ',path.length()*2); WCHAR * pcmd= new(nothrow) WCHAR[cmd.length()*2]; memset(pcmd,cmd.length()*2); string tempstr; ToWCHAR(path,ppath); //creates WCHAR from my std::string ToWCHAR(cmd,pcmd); STARTUPINFO info={sizeof(info)}; info.dwFlags = STARTF_USESHOWWINDOW; //hide process PROCESS_INFORMATION processInfo; if (CreateProcess(ppath,pcmd,NULL,FALSE,&info,&processInfo)) { ::WaitForSingleObject(processInfo.hProcess,INFINITE); CloseHandle(processInfo.hProcess); CloseHandle(processInfo.hThread); } delete[](ppath); delete[](pcmd); }
这段代码可能让任何体面的程序员尖叫,但(我甚至不应该说:)它的工作原理;-)