2009-02-19 3 views
2

Comment puis-je trouver le propriétaire d'un processus donné en C#? La classe System.Diagnostics.Process ne semble pas avoir de propriétés ou de méthodes qui me donneront cette information. Je suppose qu'il doit être disponible car il est affiché dans le Gestionnaire des tâches de Windows sous la colonne "Nom d'utilisateur".Comment obtenir le nom d'utilisateur ou le propriétaire d'un processus dans .net

Mon scénario spécifique consiste à rechercher l'instance d'un processus (tel que taskhost.exe) qui s'exécute en tant que "Service local". Je sais comment trouver toutes les instances de TaskHost utilisant

Process.GetProcessesByName("taskhost") 

Alors maintenant, je veux juste savoir comment identifier celui qui est en cours d'exécution en tant que service local.

Répondre

1

voudrez peut-être essayer le code à this link

Premier résultat à la recherche Google pour "C# PROCESS propriétaire"

Très probablement le gestionnaire de tâches utilise l'API Win32 via C pour ce faire. Ce processus est également décrit dans le lien ci-dessus.

6

Utilisez WMI pour récupérer les instances du Win32_Process class, puis appelez le GetOwner method sur chaque instance pour obtenir le nom de domaine et le nom d'utilisateur de l'utilisateur sous lequel le processus s'exécute. Après avoir ajouté une référence à l'assembly System.Management, le code suivant devrait vous aider à démarrer:

// The call to InvokeMethod below will fail if the Handle property is not retrieved 
string[] propertiesToSelect = new[] { "Handle", "ProcessId" }; 
SelectQuery processQuery = new SelectQuery("Win32_Process", "Name = 'taskhost.exe'", propertiesToSelect); 

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(processQuery)) 
using (ManagementObjectCollection processes = searcher.Get()) 
    foreach (ManagementObject process in processes) 
    { 
     object[] outParameters = new object[2]; 
     uint result = (uint) process.InvokeMethod("GetOwner", outParameters); 

     if (result == 0) 
     { 
      string user = (string) outParameters[0]; 
      string domain = (string) outParameters[1]; 
      uint processId = (uint) process["ProcessId"]; 

      // Use process data... 
     } 
     else 
     { 
      // Handle GetOwner() failure... 
     } 
    } 
Questions connexes