在C#中使用CMD命令显示任务列表

时间:2018-09-17 12:59:05

标签: c# command-line cmd

我需要使用C#和CMD中的任务列表查找进程的PID号。

PID号需要以c#格式输入文本框。

在命令提示符下查找pid号的代码是此。

for /f "tokens=1,2"  %a in ('  Tasklist /fi "imagename eq notepad.exe" /nh') do @echo %b

但是我不知道如何将CMD命令集成到C#winform中。

2 个答案:

答案 0 :(得分:0)

您当然可以启动命令提示符窗口(Console)并捕获其stdout和stderr流以获取数据,然后对其进行解析并将其显示在Windows窗体控件中,

同时,通常在这种情况下,标准.NET Framework的Process类部分用于检索Windows计算机上正在运行的进程的任何信息,

例如,在MSDN中查看了此方法:Process.GetProcessesByNameProcess类的任何其他方法,这样就可以在任何控制台窗口中都无需运行任何命令的情况下进行操作。

答案 1 :(得分:0)

通过使用Process.GetProcessesByName然后输出进程Id,可以在.NET中实现相同的目的:

foreach (var p in Process.GetProcessesByName("notepad"))
{
    Console.WriteLine(p.Id);
}

或者,如果您确实要使用cmd窗口并捕获输出,则可以创建一个进程,该进程将运行cmd.exe并向其传递您要执行的命令行(添加/C开头,告诉cmd.exe运行后关闭cmd窗口)。您还想要RedirectStandardOutput,它使您可以捕获所运行命令的输出。然后,您可以使用proc.StandardOutput.ReadLine()来获取返回的每一行:

var proc = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "cmd.exe",
        Arguments = "/C for /f \"tokens=1,2\" %a in " + 
            "('Tasklist /fi \"imagename eq notepad.exe\" /nh') do @echo %b",
        RedirectStandardOutput = true,
        UseShellExecute = false,
    }
};

proc.Start();
proc.WaitForExit();

while (!proc.StandardOutput.EndOfStream)
{
    Console.WriteLine(proc.StandardOutput.ReadLine());
}