我正在尝试捕获子控制台应用程序的输出。
- 当父级是控制台应用程序时,一切正常。
- 当父级是 Windows 应用程序时,子级无法运行,并
Console.ReadKey()
在 stdInput 被重定向时表示无法读取密钥。但是,我没有重定向输入(仅重定向输出)。
我在这里想念什么?
子代码(将项目设置为控制台应用程序):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ChildProcess
{
internal class Program
{
private static void Main(string[] args)
{
char key = Console.ReadKey().KeyChar;
Console.Out.WriteLine("stdout");
Console.Error.WriteLine("stderr");
}
}
}
父应用代码:(将项目设置为 windows 应用)
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace RedirectProcessOutput
{
internal class Program
{
private static void Main(string[] args)
{
string fileName = @"ChildPRocess.exe";
string arg = "i";
string processOutput = "?";
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = false;
p.StartInfo.FileName = fileName;
p.StartInfo.Arguments = arg;
p.Start();
processOutput = p.StandardOutput.ReadToEnd();
p.WaitForExit();
Console.WriteLine("The child process output is:" + processOutput);
}
}
}
我期望应用程序即使在父应用程序是窗口应用程序时也能运行而不会崩溃,因为子应用程序应该有自己的控制台,而我没有为此重定向输入。顺便说一句 - 在以下情况下一切正常:
- 孩子没有做“ReadKey”或
- 父母根本没有重定向标准输出