如何使用 cmd.exe 读取命令 运行 的输出
how to read output of a command run using cmd.exe
我想以编程方式 运行 在命令提示符下执行命令,读取其输出,然后终止命令 window。
sc query eventlog
当我手动 运行 这个命令时,下面是我得到的结果。
这是我的代码。
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 [Version 6.3.9600] (c) 2013 Microsoft Corporation.
All rights reserved.
我做错了什么?
您需要调用 sc.exe 而不是 cmd.exe:
p.StartInfo.FileName = "sc.exe";
p.StartInfo.Arguments = "query eventlog";
我想以编程方式 运行 在命令提示符下执行命令,读取其输出,然后终止命令 window。
sc query eventlog
当我手动 运行 这个命令时,下面是我得到的结果。
这是我的代码。
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 [Version 6.3.9600] (c) 2013 Microsoft Corporation. All rights reserved.
我做错了什么?
您需要调用 sc.exe 而不是 cmd.exe:
p.StartInfo.FileName = "sc.exe";
p.StartInfo.Arguments = "query eventlog";