Wie Ermittle ich den Eigentümer eines Prozesses, in C#?
Ich bin auf der Suche nach einem Prozess mit Namen "MyApp.exe" und ich möchte sicherstellen, dass ich den Prozess, die im Besitz eines bestimmten Benutzers.
Ich verwende den folgenden code, um eine Liste der Prozesse:
Process[] processes = Process.GetProcessesByName("MyApp");
Dieser gibt mir eine Liste der Prozesse, aber es scheint nicht zu einem Weg in die Process-Klasse zu bestimmen, wer der Besitzer dieses Prozesses? Irgendwelche Gedanken auf, wie ich dies tun kann?
InformationsquelleAutor adeel825 | 2009-04-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie WMI, verwenden um Benutzer besitzen einen bestimmten Prozess. Die WMI verwenden, müssen Sie fügen Sie einen Verweis auf die
System.Management.dll
zu Ihrem Projekt.Mit Prozess-id:
Von Prozess-name (findet der erste Prozess nur, entsprechend anpassen):
Dank Mike, es behoben.
Ein Wort der Warnung: WMI-Abfragen wie diese sind nur mit entsprechenden Berechtigungen. Nicht-admin-Konten in der Regel don 'T haben Zugriff auf WMI-Anbieter wie "Win32_Process". msdn.microsoft.com/en-us/library/windows/desktop/...
Aus irgendeinem Grund, die oben genannten Beispiel funktionierte auf meinem Entwicklungs-Rechner, aber ich habe "Ungültige Abfrage" auf einem server-Computer. Dies wurde gelöst, indem anstatt
string query = "..."
mitSelectQuery query = new SelectQuery("...")
.WMI ist langsam. Vor allem mit Nachschlage-jeder Prozess auf dem system und setzen Sie dann eine Ausnahmebehandlung für diejenigen, die verweigert, aus Sicherheitsgründen. Wenn Sie wollte, zu filtern Prozess, indem Benutzer sind, könnten Sie möglicherweise versuchen, pinvoking WTSQuerySessionInformationW().
InformationsquelleAutor Dirk Vollmar
Seit WMI ist nicht immer eine schnelle Möglichkeit zum abrufen von Informationen, hier ist das native P/Invoke Weg, es zu tun:
Ist der Rückgabewert
null
wenn erfolglos. Um die Namen der Laufenden Prozesse unter dem SYSTEM-Benutzer sind, müssen Sie diesen code ausführen als administrator.toll 🙂 WMI wäre viel langsamer
Vereinbart! Dass es sein würde.
InformationsquelleAutor bytecode77
Hier ist die VB-version für die non C# Lautsprecher:
Eigentlich bin ich ein C# - dev, der schreiben muss, das in VB.NET. Ich suchte für C#, so konnte ich schnell verstehen. Mit dem VB-code hier auch mich gerettet eine Menge Zeit. Danke.
InformationsquelleAutor Stefano
Leider gibt es keine native .Net Weg, um den Prozess-Besitzer.
Haben Sie einen Blick auf diese für eine mögliche Lösung:
InformationsquelleAutor Damovisa
Fügen Sie einen Verweis in Ihr Projekt ein:
Dann fügen Sie die folgende Methode, um Ihr Projekt:
Dann fügen Sie diese Methode:
Aufrufen GetProcessTable() liefert ein DataTable-alle Laufenden Prozesse zusammen mit Ihrer Id und Name, das ist praktisch, weil es kann verwendet werden, als ein DataGridView Datasource-parameter.
Lassen Sie mich wissen, wenn Sie weitere Felder hinzufügen, um der Tabelle.
InformationsquelleAutor Knickerless-Noggins
Sorry, Es ist nicht die Antwort auf diesem thread-Frage. Es zeigt nur, dass der Prozess die Benutzer-id (windows-account) ein .net-Anwendung zur Laufzeit.
Dies ist hilfreich für Verwandte Aufgaben wie "Holen Sie sich aktuelle Benutzer-Prozesse", die, wie ich hier gelandet
Sie würde nur wollen, verwenden Sie diese in Verbindung mit Prozess-start ->', "runas", um starten Sie Ihren Prozess im administrator-Modus, wenn es nicht bereits. Dies wird Ihnen weitere Informationen auf das Bild während der Abfrage. Dies ist jedoch nicht das, was war gefragt in der Frage.
InformationsquelleAutor Ben Lin
@bytecode77:
Kann ich dir jetzt nur aus der Suche in Ihrem code, den Sie erstellen werden potenzielle FirstChanceExceptions ... speziell wegen "ZUGRIFF VERWEIGERT" (Win32Exception) und "LÄUFT NICHT" (ArgumentException) für diese.in der 'catch' - block aus der Ausdrucksauswertung der 'Prozess.Griff'.
Siehe auch Linkdemand-Anweisung=6 und SecurityCriticalAttribute.
Während Sie vielleicht noch brauchen, um zu 'Extras' - > Debugging -> Aktiviert Nur Mein Code für dieses Attribut, die FirstChanceExceptions wird immer noch erhoben.
Andere als die, die ich nicht einverstanden mit Ihrer Antwort in der pinvoke-Win32-Aufruf schneller als WMI, insbesondere bei der Iteration über ALLE Prozesse.
InformationsquelleAutor Latency
Dies ist der einfachste Weg, die ich gefunden habe, es zu tun:
Wie man den Benutzernamen von einem anderen Prozess?
InformationsquelleAutor Fallon Yager