WPF:从shell中执行的脚本中读取日志?

时间:2011-03-03 16:36:02

标签: c# .net wpf

我使用以下代码在命令提示符中启动外部程序:

private void GenerateTiff(String fileName) {
            bool success = true;
            BackgroundWorker worker = new BackgroundWorker();
            worker.DoWork += delegate
            {
                try
                {
                    String cmd = @"./lib/gswin32c";
                    String args = "-dNOPAUSE -sDEVICE=pngalpha -r300 -dBATCH -dSAFER -sOutputFile=" + fileName + "-%03d" + FILEEXTENSION + " " + fileName + ".pdf";
                    Process proc = new Process();
                    proc.StartInfo.FileName = cmd;
                    proc.StartInfo.Arguments = args;
                    proc.StartInfo.CreateNoWindow = true;
                    proc.StartInfo.UseShellExecute = false;
                    proc.Start();
                }
                catch (Exception e)
                {
                    success = false;
                }
            };
            worker.RunWorkerCompleted += delegate
            {
                string file = fileName + "-001.jpg";

                if (success) {
                    DisplayImage.Visibility = System.Windows.Visibility.Visible;
                    DisplayImage.Tag = fileName;
                }
            };
            worker.RunWorkerAsync();
        }

现在我想阅读命令提示符的日志。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

查看Process.StandardOutput属性。它为您提供了一个StreamReader,可用于读取命令的输出。

请务必阅读文档,因为有一些需要注意的条件,例如:

  

要使用StandardOutput,必须将ProcessStartInfo.UseShellExecute设置为false,并且必须将ProcessStartInfo.RedirectStandardOutput设置为true。否则,从StandardOutput流中读取会引发异常。

如果外部程序写入stderr而不是stdout,请改用Process.StandardError