C# 进程不工作

C# 进程不工作,c#,.net,process,C#,.net,Process,我已尝试使用以下代码调用进程(控制台应用程序): ProcessStartInfo pi = new ProcessStartInfo(); pi.UseShellExecute = false; pi.RedirectStandardOutput = true; pi.CreateNoWindow = true; pi.FileName = @"C:\fakepath\go.exe"; pi.Argu

我已尝试使用以下代码调用进程(控制台应用程序):

       ProcessStartInfo pi = new ProcessStartInfo();
        pi.UseShellExecute = false;
        pi.RedirectStandardOutput = true;
        pi.CreateNoWindow = true;
        pi.FileName = @"C:\fakepath\go.exe";
        pi.Arguments = "FOO BAA";
        Process p = Process.Start(pi);
        StreamReader streamReader = p.StandardOutput;
        char[] buf = new char[256];
        string line = string.Empty;
        int count;
        while ((count = streamReader.Read(buf, 0, 256)) > 0)
        {
            line += new String(buf, 0, count);
        }
它只适用于某些情况。 无法工作的文件大小为1.30 mb, 我不知道这是否是它不能正常工作的原因。
line
返回一个空字符串。 我希望这是清楚的。 有人能指出我的错误吗?提前感谢。

一些想法:

  • streamreader的各种Read*方法要求您确保您的应用程序在运行前已完成,否则您可能无法获得任何输出,具体取决于时间问题。如果要使用此路由,可能需要查看Process.WaitForExit()函数

    另外,除非您有分配缓冲区的特定原因(这在我看来很痛苦),否则我只会在循环中使用readline(),或者因为进程已经退出,所以使用ReadToEnd()来获取整个输出。这两种方法都不需要执行字符数组,这会导致缓冲区大小的数学错误

  • 如果希望在运行时异步并转储输出,则需要使用BeginOutputReadLine()函数(请参阅MSDN)

  • 不要忘记错误的处理方式是不同的,因此,如果出于任何原因,您的应用程序正在写入STDERR,那么您也需要使用适当的错误输出函数来读取该输出


  • 失败的形式是什么?对于这种情况,返回一个空字符串。我用PHP的exec()函数(调用相同的进程)进行了测试,效果很好。我不知道C#,这不是问题所在,但似乎有一个不平衡的
    在包含
    BAA
    的行中。很抱歉,因为我在这里的文本框中编辑了一些变量。固定的。但是代码继续不工作。如果对该文件手动执行命令,是否会得到非空结果?此外,您是否可以编辑您的问题,以准确添加您遇到的失败,而不只是将其留在评论中?