2009-03-15 7 views
19

Ich möchte eine Möglichkeit finden, alle aktiven Prozesse durchzulaufen und Diagnoseprüfungen (Mem-Nutzung, CPU-Zeit usw.) ähnlich wie der Task-Manager durchzuführen.Wie kann ich alle in Windows ausgeführten Prozesse auflisten?

Das Problem gliedert sich in zwei Teile nach unten:

  1. alle Prozesse zu finden
  2. Diagnose zu finden, über sie
  3. darüber

Ich bin nicht sicher, auch in welcher Namespace zu suchen gehen Attribute . Jede Hilfe/Tipps/Links ist dankbar.

Antwort

49

Finding alle Prozesse

Sie können dies die Process-Klasse tun durch

using System.Diagnostics; 
... 
var allProcceses = Process.GetProcesses(); 

Lauf Diagnostics

Können Sie uns einige weitere Informationen hier? Es ist nicht klar, was du machen willst.

Die Prozessklasse bietet ein paar Informationen, die Ihnen jedoch helfen könnten. Es ist möglich, diese Klasse Abfrage für

  • Alle Themen
  • Hauptfenster
  • Griff Alle geladenen Module
  • Verschiedene Diagnoseinformationen über Speicher (Paged, virtuelle, Working Set, etc ...)
  • Basic Process Information (id, name, Plattenort)

EDIT

Op erwähnt möchten sie Speicher und CPU-Informationen erhalten. Diese Eigenschaften sind in der Process-Klasse (die von GetProcesses() zurückgegeben wird) sofort verfügbar. Unten ist die MSDN-Seite, die alle unterstützte Eigenschaften auflistet. Es gibt verschiedene Speicher und CPUs, die Ihren Anforderungen entsprechen.

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

Code:

Fügen Sie diese Zeile in die Liste mit:

using System.Diagnostics; 

Jetzt können Sie eine Liste der Prozesse mit den Process.GetProcesses get() Methode, wie in diesem Beispiel zu sehen:

Process[] processlist = Process.GetProcesses(); 

foreach (Process theprocess in processlist) { 
    Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id); 
} 
0

Welches Betriebssystem verwenden Sie? Ich nehme es von Ihrem C# -Tag, dass es Windows ist?

Wenn ja, überprüfen Sie WMI, insbesondere die Klasse Win32_Process.Hier ist die MSDN-Referenz: http://msdn.microsoft.com/en-us/library/aa394372(VS.85).aspx

Neben ein paar Einsatzszenarien hier (wie eine Liste der Prozesse erhalten): http://msdn.microsoft.com/en-us/library/aa394599(VS.85).aspx

+0

Ja, es ist Windows (es heißt im Thema). – Statement

+0

Haha Entschuldigung, massive übersehen meinerseits! – CapBBeard

4

alle Prozesse zu finden, ist ziemlich einfach actualy:

using System.Diagnostics; 

      Process[] processes = Process.GetProcesses(); 

      foreach (Process process in processes) 
      { 
       //Get whatever attribute for process 
      } 
3

JaredPar bereits hingewiesen auf die Process Klasse, so werde ich nur hinzufügen, dass Sie wissen sollten, dass die Klasse einen Schnappschuss der Prozessinformationen erstellt, wenn die Instanz erstellt wird. Es ist keine Live-Ansicht. Um es zu aktualisieren, müssen Sie Refresh() für die Instanz aufrufen.

Denken Sie auch daran, dass der Prozess möglicherweise geschlossen wird, während Sie ihn inspizieren. Seien Sie also darauf vorbereitet, Ausnahmen zu erfassen und entsprechend zu behandeln.

Und schließlich, wenn Sie Process.GetProcesses() aufrufen, erhalten Sie auch die Pseudoprozesse "Leerlauf" und "System". IIRC sie haben spezifische Prozess-IDs, so dass Sie sie leicht herausfiltern können.

+0

Danke für die Gotcha. Ich werde sicher sein, dies zu beachten +1 – Statement

0

Nun können Sie dies in tun Power

1.Finding alle Prozesse

get-Process 

2.Finding Diagnose über sie Attribute

get-Process | where-object { $_.Handles -gt 200 } 

Der obige Code wird alle Prozesse Rückkehr mit Über 200 Handles können Sie auf diese Weise Ihre Diagnoseattribute einfach angeben.

Weitere Informationen über how to handle processes using powershell see this

0
using System.Diagnostics; 

class Program 
{ 
    static void Main() 
    { 
     Process[] processlist = Process.GetProcesses();`   
    } 
} 

hier Prozess arrray enthält alle die Anzahl der Prozess vorhanden hinein.

+0

verbessern Format – GAMITG