gpt4 book ai didi

c++ - 使用句柄从 CreateProcess() 收集输出

转载 作者:可可西里 更新时间:2023-11-01 16:20:09 25 4
gpt4 key购买 nike

我正在使用 CreateProcess() 从我的 GUI 应用程序在 Windows 中运行外部控制台应用程序。我想以某种方式收集输出以了解是否有错误。现在我知道我必须对 hStdOutput 做些什么,但我不明白是什么。我是 c++ 的新手,也是一个没有经验的程序员,我实际上不知道如何处理 handle 或如何点亮管道。

如何将输出输出到某种变量(或文件)?

这就是我现在拥有的:

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 将输出读取到文件(例如)?

最佳答案

Microsoft 在其知识库中有一个示例演示如何捕获子控制台进程的输出。基本原则是父进程创建管道(每个要重定向的标准句柄一个)并将句柄传递给 CreateProcess。

无需修改子进程即可使其工作,如果您无法控制子进程的源代码,这一点很重要。

更多信息:How to spawn console processes with redirected standard handles

关于c++ - 使用句柄从 CreateProcess() 收集输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2674237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com