2010-04-28 13 views
15

Tengo que obtener la ruta absoluta de un servicio de Windows en una aplicación .Net Admin. Estoy usando ServiceController of .Net como se muestra a continuación.cómo obtener la ruta phyiscal del servicio de Windows usando .net?

ServiceController serviceController = new ServiceController(serviceName); 

Pero no veo ninguna propiedad aquí para obtener la ruta absoluta del .exe del servicio. ¿Hay alguna forma de obtener esto programáticamente?

Respuesta

16

usted puede conseguir esto usando WMI, que requiere una referencia de ensamblado a 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 no es su propia asamblea puede buscar en el registro en:

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

O si te refieres a encontrar el camino de su propia asamblea:

Assembly.GetExecutingAssembly().CodeBase; 
Cuestiones relacionadas