2009-02-20 53 views
8

这有点痛苦,因为我现在没有代码在我面前,但我会尝试解释。为什么C#ProcessStartInfoRedirectStandardOutput会导致xcopy进程失败

我有一个简单的C#应用​​程序,它启动了一个Ruby脚本(它做了一些其他的事情,因此它会生成一个批处理文件并执行它)。

我现在用的是C#进程对象,我设置以下 redirectstandardoutput =真 redirectstandarderror =真 UseShellExecute =假 CreateNoWindow =真(向后逻辑的可爱位有!)

然后创建两个线程并为错误和输出流轮询ReadLine(),在我调用WaitForExit()之前等待它们完成。

现在,无论我做什么我Ruby脚本无法调用系统(“XCOPY ...”)命令时,我将输出重定向(没有错误产生,它只是不复制)。它也不会复制我要求它复制的其他文件。

如果我将两个流都指向一个线程,其中之一只重定向其中一个线程并调用ReadToEnd(),则会发生这种情况。

只有当我将redirectstandardoutput和redirectstandarderror设置为false时,它才能正常工作。

我在这里完全损失。我想可能是输出流被填满了,但我无法想象为什么如果我打电话给ReadLine(我需要读取线路,以便我可以解析每一行,并只向最终用户提供相关内容)。我也想过,从线程化的C#进程调用dos命令可能会导致问题。

有没有人有任何想法可能会发生在这里?我应该说我在VS.net 2005上,我认为它是.Net Framework 2.0。

回答

9

有一个obscure post on the MSDN forums似乎表明XCOPY本身可能存在毛病 - 如果您重定向XCOPY的STDOUT,则还必须重定向STDIN。

注:我标志着这个社会的维基,所以有人谁知道红宝石可以写一些示例代码重定向STDIN系统()

+0

这是问题。我只需设置processToRun.StartInfo.RedirectStandardInput = true并且xcopy完美运行。 有趣的是,当我有输出工作时,无论如何我都会重定向输入。 – 2009-02-20 07:31:12

相关问题