2010-04-28 17 views
15

Je dois obtenir le chemin absolu d'un service Windows dans une application .Net Admin. J'utilise ServiceController de .Net comme indiqué ci-dessous.comment obtenir chemin pathologique du service Windows en utilisant. NET?

ServiceController serviceController = new ServiceController(serviceName); 

Mais je ne vois aucune propriété ici pour obtenir le chemin absolu du fichier .exe du service. Y at-il de toute façon pour obtenir ce par programme.

Répondre

16

Vous pouvez obtenir cela en utilisant WMI, qui requiert une référence d'assembly à System.Management:

using System.Management; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine(GetPathOfService("eventlog")); 
     Console.ReadLine(); 
    } 

    public static string GetPathOfService(string serviceName) 
    { 
     WqlObjectQuery wqlObjectQuery = new WqlObjectQuery(string.Format("SELECT * FROM Win32_Service WHERE Name = '{0}'", serviceName)); 
     ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(wqlObjectQuery); 
     ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get(); 

     foreach (ManagementObject managementObject in managementObjectCollection) 
     { 
      return managementObject.GetPropertyValue("PathName").ToString(); 
     } 

     return null; 
    } 
} 
5

Si ce n'est pas sa propre assemblée, vous pouvez regarder dans le registre:

HKLM\System\CurrentControlSet\Services\[servicename]\ImagePath 

Ou si vous voulez dire trouver votre propre chemin de montage:

Assembly.GetExecutingAssembly().CodeBase;