调用CLI exe的过程不返回输出

时间:2012-11-27 15:33:24

标签: c# .net command-line process command-line-interface

我有一个正在进行视频处理的应用。

我需要在处理之前分析媒体。

ffmpeg实用程序ffprobe.exe提供了我需要的所有信息。

但是我使用的代码不会返回在cmd窗口中运行命令时显示的文本:

public static string RunConsoleCommand(string command, string args)
{
    var consoleOut = "";

    using (var process = new Process())
    {
        process.StartInfo = new ProcessStartInfo
        {
            FileName = command,
            Arguments = args,
            UseShellExecute = false,
            CreateNoWindow = true,
            RedirectStandardOutput = true
        };

        process.Start();
        consoleOut = process.StandardOutput.ReadToEnd();
        process.WaitForExit();

        return consoleOut;
    }
}

任何想法?

1 个答案:

答案 0 :(得分:0)

Process类有一些事件可以处理:

public static string RunConsoleCommand(string command, string args)
{
    var consoleOut = "";

    using (var process = new Process())
    {
        process.StartInfo = new ProcessStartInfo
        {
            FileName = command,
            Arguments = args,
            UseShellExecute = false,
            CreateNoWindow = true,
            RedirectStandardOutput = true
        };

        // Register for event and do whatever
        process.OutputDataReceived += new DataReceivedEventHandler((snd, e) => { consoleOut += e.Data; });

        process.Start();
        process.WaitForExit();

        return consoleOut;
    }
}

你也有ErrorDataReceived,它的工作方式相同。

我在某些项目中使用这些事件,它就像一个魅力。希望有所帮助。

编辑:修复了代码,您需要在开始此过程之前附加处理程序。