【问题标题】:Detecting a Process is already running in windows using C# .net使用 C# .net 检测进程已在 Windows 中运行
【发布时间】:2008-10-09 15:52:18
【问题描述】:

如何检测一个进程是否已经在 Windows 任务管理器下运行?我也想获得内存和cpu使用情况。

【问题讨论】:

标签: c# .net windows winforms


【解决方案1】:

简单的例子...

bool processIsRunning(string process)
{
    return (System.Diagnostics.Process.GetProcessesByName(process).Length != 0);
}

糟糕...忘记了内存使用等...

bool processIsRunning(string process)
{
System.Diagnostics.Process[] processes = 
    System.Diagnostics.Process.GetProcessesByName(process);
foreach (System.Diagnostics.Process proc in processes)
{
    Console.WriteLine("Current physical memory : " + proc.WorkingSet64.ToString());
    Console.WriteLine("Total processor time : " + proc.TotalProcessorTime.ToString());
    Console.WriteLine("Virtual memory size : " + proc.VirtualMemorySize64.ToString());
}
return (processes.Length != 0);
}

(我将把从方法中获取数据的机制留给您 - 现在是 17:15,我准备回家了。:)

【讨论】:

    【解决方案2】:

    您是否查看过System.Diagnostics.Process 类。

    【讨论】:

      【解决方案3】:

      如果您想了解正在运行的 IE 进程:

      System.Diagnostics.Process[] ieProcs = Process.GetProcessesByName("IEXPLORE");
      
      if (ieProcs.Length > 0)
      {
         foreach (System.Diagnostics.Process p in ieProcs)
         {                        
            String virtualMem = p.VirtualMemorySize64.ToString();
            String physicalMem = p.WorkingSet64.ToString();
            String cpu = p.TotalProcessorTime.ToString();                      
         }
      }
      

      【讨论】:

        【解决方案4】:

        您可以使用System.Diagnostics.Process 类。
        有一个 GetProcesses() 和一个 GetProcessesByName() 方法将获取数组中所有现有进程的列表。

        Process 对象包含检测进程是否正在运行所需的所有信息。

        【讨论】:

          【解决方案5】:

          您可以使用 WMI 来查询类似的内容

          "SELECT * FROM Win32_Process WHERE Name = '<your process name here>'"
          

          不过,WMI 尤其是处理器的使用有点棘手。正如Ian Jacobs 所建议的那样,使用 System.Diagnostics.Process 可能会更好。

          【讨论】:

            【解决方案6】:

            类似这样的:

            foreach ( WindowsProcess in Process.GetProcesses) 
            { 
                if (WindowsProcess.ProcessName == nameOfProcess) { 
                    Console.WriteLine(WindowsProcess.WorkingSet64.ToString); 
                    Console.WriteLine(WindowsProcess.UserProcessorTime.ToString); 
                    Console.WriteLine(WindowsProcess.TotalProcessorTime.ToString); 
                } 
            } 
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-05-25
              • 1970-01-01
              • 2010-12-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多