Die C#-Process
-Klasse gibt den Prozessbesitz nicht direkt offen. Wir können jedoch die Windows-Verwaltungsinstrumentation (WMI) nutzen, um dieses entscheidende Detail zu erhalten. Denken Sie daran, in Ihrem Projekt einen Verweis auf System.Management.dll
hinzuzufügen.
Diese Methode ruft den Prozessbesitzer anhand seiner ID ab:
<code class="language-csharp">public string GetProcessOwner(int processId) { string query = $"Select * From Win32_Process Where ProcessID = {processId}"; using (var searcher = new ManagementObjectSearcher(query)) { using (var processList = searcher.Get()) { foreach (ManagementObject obj in processList) { string[] ownerInfo = new string[2]; int result = Convert.ToInt32(obj.InvokeMethod("GetOwner", ownerInfo)); if (result == 0) { return $"{ownerInfo[1]}\{ownerInfo[0]}"; // DOMAIN\user format } } } } return "NO OWNER"; }</code>
Diese Alternative verwendet den Prozessnamen, um den Eigentümer zu finden:
<code class="language-csharp">public string GetProcessOwner(string processName) { string query = $"Select * from Win32_Process Where Name = '{processName}'"; using (var searcher = new ManagementObjectSearcher(query)) { using (var processList = searcher.Get()) { foreach (ManagementObject obj in processList) { string[] ownerInfo = new string[2]; int result = Convert.ToInt32(obj.InvokeMethod("GetOwner", ownerInfo)); if (result == 0) { return $"{ownerInfo[1]}\{ownerInfo[0]}"; // DOMAIN\user format } } } } return "NO OWNER"; }</code>
Diese Funktionen bieten eine robuste Möglichkeit zur Bestimmung der Prozessverantwortung und liefern wertvolle Erkenntnisse für die Systemverwaltung und Sicherheitsanalyse. Die Verwendung von using
-Anweisungen gewährleistet eine ordnungsgemäße Ressourcenentsorgung.
Das obige ist der detaillierte Inhalt vonWie finde ich mithilfe von WMI den Besitzer eines Prozesses in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!