簡體   English   中英

使用C#.net在Windows中檢測進程已在運行

[英]Detecting a Process is already running in windows using C# .net

如何檢測進程是否已在Windows任務管理器下運行? 我也想獲得內存和CPU使用率。

簡單的例子......

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,我准備回家了。:)

您是否查看了System.Diagnostics.Process類。

您可以使用System.Diagnostics.Process類。
有一個GetProcesses()和一個GetProcessesByName()方法,它將獲取數組中所有現有進程的列表。

Process對象具有檢測進程是否正在運行所需的所有信息。

如果您想了解正在運行的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();                      
   }
}

您可以使用WMI查詢某些內容

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

但是,尤其是WMI處理器的使用有點棘手。 正如Ian Jacobs建議的那樣,你最好使用System.Diagnostics.Process。

像這樣的東西:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM