我使用CreateProcess()从我的GUI应用程序在Windows中运行外部控制台应用程序。我想以某种方式收集输出以了解是否有错误。现在我知道我必须用hStdOutput做些什么,但我不明白是什么。我是新来的C++和一个没有经验的程序员,我实际上不知道如何处理或如何点亮管道。使用句柄从CreateProcess()收集输出
如何获得某种变量(或文件)的输出?
这是我有一个时刻:
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, NULL, FALSE, 0, NULL, NULL, &info, &processInfo))
{
::WaitForSingleObject(processInfo.hProcess, INFINITE);
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
delete[](ppath);
delete[](pcmd);
}
此代码可能使得任何的程序员的尖叫,但(我应该甚至不应该说出来:)它的工作原理;-)
的问题:如何使用hStdOutput将输出读取到文件(例如)?
相关:[?启动与标准输入标准输出一个exe /过程和stderr](http://stackoverflow.com/questions/5485923/launch-an-exe-process-with-stdin -stdout和 - 标准错误/ 39648986)。另外,请参阅[tiny-process-library](https://github.com/eidheim/tiny-process-library),这非常方便。 – Delgan 2016-09-22 21:31:04