gpt4 book ai didi

c++ - 无法使用 CreateProcess 重定向标准输出

转载 作者:搜寻专家 更新时间:2023-10-31 00:28:56 25 4
gpt4 key购买 nike

我正在维护一个 MFC 程序,我正在使用 CreateProcess 启动一个简单的 Win32 控制台程序(只是一个“Hello World”程序,源代码如下),我无法重定向标准该程序的输出到一个文件。

这是启动代码,不要理会 Fatal 函数,它只是显示一条消息并中止程序,这只是测试代码。

  HANDLE hfile = CreateFile("output.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

if (hfile == INVALID_HANDLE_VALUE)
{
Fatal("Fatal error: CreateFile");
}

static const char TestText[] = "Test\r\n";
DWORD written;
if (!WriteFile(hfile, "Test\r\n", sizeof(TestText) - 1, &written, NULL))
{
Fatal("Fatal error: CreateProcess");
}

STARTUPINFO startupinfo = {0};
startupinfo.cb = sizeof(STARTUPINFO);
startupinfo.lpTitle = "Some Title";
startupinfo.dwFlags = STARTF_USESTDHANDLES;
startupinfo.hStdOutput = hfile;

PROCESS_INFORMATION processInfo;

if (!CreateProcess("S:\\Git\\TestRedirect\\TestConsole1\\Debug\\TestConsole1.exe", "cmdline", NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &startupinfo, &processInfo))
{
Fatal("Fatal error: CreateProcess");
}

if (WaitForSingleObject(processInfo.hProcess, 10000) != WAIT_OBJECT_0)
{
Fatal("Fatal error: WaitForSingleObject");
}

if (!CloseHandle(hfile))
{
Fatal("Fatal error: CloseHandle");
}

它几乎按预期工作:

  • 它打开“output.txt”
  • 它将“Test\r\n”写入“output.txt”
  • 它启动 TestConsole1.exe
  • TestConsole1.exe 的控制台窗口不显示“Hello Word”,这是预期的,因为标准输出应该被重定向到“output.txt”
  • WaitForSingleObject 等待 TestConsole1.exe 完成
  • CloseHandle 关闭“output.txt”

现在我希望“output.txt”包含这个:

Test
Hello World!

但实际上它的内容是

Test


TestConsole1.exe源代码:

#include <stdio.h>
#include <windows.h>

int main(int argc, char* argv[])
{
printf("Hello World!\n");
Sleep(2000); // wait 2 seconds so I can see what happens
return 0;
}

最佳答案

您的 hfile 不可继承 - 您需要在调用 CreateFile 时使用 SECURITY_ATTRIBUTES

SECURITY_ATTRIBUTES sa = { sizeof(sa), 0, TRUE };
HANDLE hfile = CreateFile("output.txt", GENERIC_WRITE, 0, &sa, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

关于c++ - 无法使用 CreateProcess 重定向标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43274972/

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