进程不工作

本文关键字:工作 进程 | 更新日期: 2023-09-27 18:06:42

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

       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返回一个空字符串。我希望这是清楚的。有人能指出我的错误吗?

进程不工作

几点思考:

  1. streamreader的各种Read*方法要求你确保你的应用程序在运行之前已经完成,否则你可能会因为时间问题而没有输出。如果你想使用这条路由,你可能需要查看Process.WaitForExit()函数。

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

  2. 如果您想异步运行并在运行时转储输出,您将需要使用BeginOutputReadLine()函数(参见MSDN)

  3. 不要忘记错误的处理方式是不同的,所以如果由于任何原因你的应用程序正在写入STDERR,你也会想要使用适当的错误输出函数来读取输出。