【问题标题】:Use CMD commands in C# For showing Tasklist在 C# 中使用 CMD 命令来显示任务列表
【发布时间】:2018-09-17 12:59:05
【问题描述】:

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

PID 号需要以 c# 形式放入文本框中。

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

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

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

【问题讨论】:

    标签: c# command-line cmd


    【解决方案1】:

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

    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());
    }
    

    【讨论】:

      【解决方案2】:

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

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

      查看 MSDN 中的这种方法,例如:Process.GetProcessesByNameProcess 类的任何其他方法,这样您无需在任何控制台窗口中运行任何命令即可执行此操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-02
        • 2011-07-08
        相关资源
        最近更新 更多