当ProcessStartInfo.CreateNoWindow设置为true时,为什么RedirectStandardInput无效?

时间:2013-07-21 23:11:10

标签: c# .net io console finalbuilder

我使用System.Diagnostics.Process与第三方控制台应用程序进行交互,其中stdin / out / err已被重定向 (外部程序是用C ++编写的,我无法控制它。)

ProcessStartInfo info = new ProcessStartInfo(fileName, arg); 
info.CreateNoWindow = false; // <- if true, stdin writes don't make it through
info.UseShellExecute = false;
info.RedirectStandardInput  = true;
info.RedirectStandardOutput = true;
info.RedirectStandardError  = true;

var proc = new Process() { StartInfo = info };
proc.OutputDataReceived += new DataReceivedEventHandler(myOutputHandler);
proc.ErrorDataReceived  += new DataReceivedEventHandler(myErrorHandler);
proc.Start();
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();

...后来

proc.StandardInput.WriteLine("some-short-command");

当info.CreateNoWindow = false时,在测试控制台应用程序中正常工作; 但是当info.CreateNoWindow = true;

时没有效果

输出和错误重定向在两种情况下都能正常工作。

上面的代码是定义FinalBuilder自定义操作的类库的一部分。 可以从测试控制台应用程序或从FinalBuilder桌面应用程序中运行来观察所描述的行为。

有趣的是,当从具有相同用户和环境的第三个上下文 - FinalBuilder服务器运行时,StandardInput.WriteLine无效,无论info.CreateNoWindow是true还是false。

发生了什么事?

无论执行上下文如何,我都可以使stdin重定向工作吗?

1 个答案:

答案 0 :(得分:1)

不确定原因,但在此处明确指定用户可以解决问题:

proc.UserName = user;
proc.Domain= domain;
proc.Password= password;

不是很优雅,但对我有用,可以帮助别人。