C#关闭标准输出

Lim*_*ent 8 c# console redirectstandardoutput

我希望能够将我的程序从控制台中分离出来wget -b.代码片段可能看起来像

static void Main(string[] args)
{
    var settings = new Settings(args);
    if (settings.Background)
    {
        /*Tell the user what's going on.*/
        System.Console.WriteLine("Detatching from console. The program will still be running.");
        System.Console.Out.Close();
    }
    /*do work then exit.*/
}
Run Code Online (Sandbox Code Playgroud)

但是System.Console.Out.Close();没有做正确的事.

为了澄清,"正确的事情"是,当从控制台运行此程序时,应该重新出现提示.或者,从中运行此程序时explorer.exe,控制台窗口应该关闭.

如果我不清楚,请告诉我.

Lim*_*ent 1

您所参考的来源wget在此处找到。您会注意到,在 mswindows.c 第 193 - 314 行中,实现了 fork 过程。它们生成 的一个新实例wget并向其传递相同的参数。

评论也内容丰富:

Windows 不支持 fork() 调用;因此,我们通过调用 Wget 的另一个副本来伪造它,并使用与我们调用时相同的参数。

第 102 行:

在 Windows 9x 下,如果我们从 16 位进程启动......父进程应该立即恢复。在 NT 下……这是一个徒劳的手势,因为父级将等待我们终止然后再恢复。

简短的回答似乎是“不要这样做”。