0

我有一个方法可以创建一个 Process 对象,设置参数并为它加注星标。下面的代码中哪种检查错误的方法更正确?这个 :

public void DoSomething(string command)
    {
        try
        {
            var p = new Process();
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.FileName = command;
            p.Start();
            p.WaitForExit();
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
    }

或这个 :

public void DoSomething(string command)
    {
        Process p = new Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.RedirectStandardError = true;
        p.StartInfo.FileName = command;
        p.Start();
        string error = p.StandardError.ReadToEnd();
        p.WaitForExit();

        if (!string.IsNullOrEmpty(error))
        {
            Console.WriteLine(error);
        }
    }

谢谢你的帮助。

4

2 回答 2

1

我会建议第一种方法,但它不是将所有代码行都放在try块中的好方法。try仅对可能出现异常的行使用块:

public void DoSomething(string command)
    {

        var p = new Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.FileName = command;
        try
        {
            p.Start();
            p.WaitForExit();
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }
    }
于 2013-06-24T15:06:31.547 回答
0

读取错误应该在退出之后。你可以在下面试试这个。

 process.WaitForExit();

 //Reading output and error
 string output = process.StandardOutput.ReadToEnd();
 string strReturnValue = process.StandardError.ReadToEnd();
于 2013-06-24T14:48:43.070 回答