簡體   English   中英

無法使用CreateProcess重定向標准輸出

[英]Unable to redirect standard output using CreateProcess

我正在維護一個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”包含以下內容:

測試
你好,世界!

但實際上它的內容是

測試


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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM