Ich möchte einen Weg finden, um alle aktiven Prozesse zu durchlaufen und Diagnoseprüfungen (Mem-Nutzung, CPU-Zeit usw.) durchzuführen, ähnlich wie beim Task-Manager.
Das Problem ist in zwei Teile gegliedert:
Ich bin mir nicht mal sicher, in welchem Namespace ich danach suchen soll. Jede Hilfe/Tipps/Links ist dankbar.
Alle Prozesse finden
Sie können dies über die Process-Klasse tun
using System.Diagnostics;
...
var allProcesses = Process.GetProcesses();
Diagnose ausführen
Können Sie uns hier weitere Informationen geben? Es ist nicht klar, was Sie tun möchten.
Die Process-Klasse enthält jedoch einige Informationen, die Ihnen helfen können. Es ist möglich, diese Klasse abzufragen
EDIT
OP erwähnt, dass sie Speicher- und CPU-Informationen erhalten möchten. Diese Eigenschaften sind für die Process-Klasse (verfügbar von GetProcesses ()) leicht verfügbar. Unten ist die MSDN-Seite, auf der alle unterstützten Eigenschaften aufgeführt sind. Es stehen verschiedene Speicher- und CPU-Speicher zur Verfügung, die Ihren Bedürfnissen entsprechen.
http://msdn.Microsoft.com/de-de/library/system.diagnostics.process.aspx
Code:
Fügen Sie diese Zeile Ihrer Verwendungsliste hinzu:
using System.Diagnostics;
Jetzt können Sie mit der Process.GetProcesses () - Methode eine Liste der Prozesse abrufen, wie in diesem Beispiel dargestellt:
Process[] processlist = Process.GetProcesses();
foreach (Process theprocess in processlist)
{
Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id);
}
Alle Prozesse zu finden ist eigentlich ganz einfach:
using System.Diagnostics;
Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
// Get whatever attribute for process.
}
JaredPar hat bereits auf die Process
-Klasse hingewiesen, ich möchte also hinzufügen, dass Sie wissen sollten, dass die Klasse beim Erstellen der Instanz eine Momentaufnahme der Prozessinformationen erstellt. Es ist keine Live-Ansicht. Um es zu aktualisieren, müssen Sie Refresh()
in der Instanz aufrufen.
Denken Sie auch daran, dass der Prozess während der Prüfung geschlossen werden kann. Seien Sie daher darauf vorbereitet, Ausnahmen zu erkennen und entsprechend zu behandeln.
Wenn Sie Process.GetProcesses()
aufrufen, erhalten Sie schließlich auch die Pseudo-Prozesse "Idle" und "System". IIRC haben spezifische Prozess-IDs, so dass Sie sie leicht herausfiltern können.
using System.Diagnostics;
class Program
{
static void Main()
{
Process[] processlist = Process.GetProcesses();`
}
}
hier enthält das Prozessarray die gesamte Anzahl der vorhandenen Prozesse.
Nun, das kannst du in Powershell machen
1. Alle Prozesse finden
get-Process
2. Diagnose-Attribute zu ihnen finden
get-Process | where-object { $_.Handles -gt 200 }
Der obige Code gibt alle Prozesse mit über 200 Handles zurück. Sie können auf diese Weise Ihre Diagnoseattribute einfach angeben.
Weitere Informationen zu wie man Prozesse mit Powershell abwickelt, erfahren Sie hier
So greife ich lieber auf die Prozesse zu:
static void Main(string[] args)
{
Process.GetProcesses().ToList().ForEach(p =>
{
Console.WriteLine(
p.ProcessName + " p.Threads.Count=" + p.Threads.Count + " Id=" + p.Id);
});
Console.ReadKey();
}
Welches Betriebssystem verwenden Sie? Ich nehme es von Ihrem C # -Tag, dass es Fenster ist?
Wenn ja, überprüfen Sie WMI, insbesondere die Klasse Win32_Process. Hier die MSDN-Referenz: http://msdn.Microsoft.com/de-de/library/aa394372(VS.85).aspx
Neben ein paar Anwendungsszenarien (z. B. das Abrufen einer Liste von Prozessen): http://msdn.Microsoft.com/en-us/library/aa394599(VS.85).aspx