启动过程时重定向标准错误和标准输入时出现问题

时间:2011-05-10 01:10:22

标签: c# java .net process io

我有一些启动java进程的c#代码。在运行Windows 7的一台机器上运行正常。在另一个正在运行的XP上,它没有。这是代码......

mServerProcess = new Process();
mServerProcess.StartInfo.FileName = "java";
mServerProcess.StartInfo.Arguments = "-jar my.jar";
mServerProcess.StartInfo.WorkingDirectory = "C:\\my_server";
mServerProcess.StartInfo.UseShellExecute = false;
mServerProcess.StartInfo.CreateNoWindow = true;
mServerProcess.StartInfo.RedirectStandardOutput = true;
mServerProcess.StartInfo.RedirectStandardError = true;
mServerProcess.StartInfo.RedirectStandardInput = true;
mServerProcess.OutputDataReceived += new DataReceivedEventHandler(ServerOutputHandler);
mServerProcess.ErrorDataReceived += new DataReceivedEventHandler(ServerErrorHandler);
mServerProcess.SynchronizingObject = this.console;

// Start the process.
mServerProcess.Start();

// Start the asynchronous read of the sort output stream.
mServerProcess.BeginOutputReadLine();
mServerProcess.BeginErrorReadLine();

在XP机器上,我从来没有从过程的标准错误中得到文本,并且整个过程似乎已经破裂。我无法从标准输入流中发送任何内容。

现在......有趣的是,如果我注释掉重定向标准输入的代码,我会得到标准错误。但当然,我也需要重定向标准输入。

有没有人见过这个?...重定向标准输入和标准错误导致问题?

再次......我的Windows 7盒子里没有这个问题。

谢谢, 蜂音

更新:

我正在使用java Logger类从我的java应用程序输出信息。我认为这个问题与Java有关,以及它的ConsoleHandler类如何处理标准错误。这让我疯了!

3 个答案:

答案 0 :(得分:1)

这个过程可能正在等待一些输入。

尝试给它一些输入。

答案 1 :(得分:0)

如果重定向输入和输出,则可能会使I / O死锁。根据缓冲,这可能在不同的操作系统或不同的输入和输出上表现不同。例如,使用1k输入时它似乎工作正常,但挂起4k。请参阅文档并搜索死锁:

答案 2 :(得分:0)

您是否正在调用使用Jline的Java进程?如果是,那么您需要使用以下参数调用它:

-Djline.terminal=jline.UnsupportedTerminal