如何读取使用cmd.exe运行的命令的输出

时间:2015-01-14 18:38:09

标签: c# .net-4.0

我想在命令提示符上以编程方式运行以下命令,读取其输出然后只是终止命令窗口。

  

sc查询事件日志

当我手动运行此命令时,下面是我得到的。

enter image description here

以下是我的代码。

class Program
    {
        static string output;
        static void Main(string[] args)
        {
            Process p = new Process();
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.Arguments = "sc query eventlog";
            p.OutputDataReceived += p_OutputDataReceived;
            p.Start();


            p.BeginOutputReadLine();

            p.WaitForExit();
            p.Kill();
        }

        static void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            output += e.Data + Environment.NewLine;
        }

但是在我的情况下,它只是等待WaitForExit的调用。为此,我可能不得不杀死这个过程。但我看到在输出变量中跟随。

  

Microsoft Windows [版本6.3.9600](c)2013 Microsoft Corporation。   保留所有权利。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

您需要调用sc.exe而不是cmd.exe:

p.StartInfo.FileName = "sc.exe";
p.StartInfo.Arguments = "query eventlog";