当前位置:  开发笔记 > 编程语言 > 正文

为什么C#ProcessStartInfoRedirectStandardOutput会导致xcopy进程失败

如何解决《为什么C#ProcessStartInfoRedirectStandardOutput会导致xcopy进程失败》经验,为你挑选了1个好方法。

这有点痛苦,因为我现在没有在我面前的代码,但我会尝试解释.

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

我正在使用C#进程对象,并设置以下redirectstandardoutput = true redirectstandarderror = true UseShellExecute = false CreateNoWindow = true(那里有可靠的向后逻辑!)

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

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

如果我将两个流定向到一个线程,其中一个线程只重定向其中一个线程并且只调用ReadToEnd(),就会发生这种情况.

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

我在这里完全失败了.我想也许输出流正在填满,但我无法想象为什么如果我正在调用ReadLine(我需要读取行,所以我可以解析每一行,只向最终用户提供相关的).我也认为从线程C#进程调用dos命令可能会导致问题.

有谁知道这里会发生什么?我应该说我在VS .net 2005上,我认为它是.Net Framework 2.0.



1> Alex Lyman..:

在MSDN论坛上有一篇不为人知的帖子似乎表明XCOPY本身可能存在故障 - 如果你重定向XCOPY的STDOUT,你还必须重定向STDIN.

(注意:我将此标记为社区维基,所以知道ruby的人可以编写一些示例代码来重定向STDIN for system())

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有