Frage

ich den absoluten Pfad eines Windows-Dienst in einer .Net-Admin-Anwendung zu bekommen. Ich verwende Servicecontroller von .Net wie unten gezeigt.

ServiceController serviceController = new  ServiceController(serviceName);

Aber ich sehe keine hier Eigenschaft den absoluten Pfad der EXE-Datei des Service zu erhalten. Gibt es trotzdem, dies programmatisch zu erhalten.

War es hilfreich?

Lösung

Sie können diese unter Verwendung von WMI erhalten, die eine Montage Bezug auf System.Management erfordert:

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;
    }
}

Andere Tipps

Wenn es nicht seine eigene Montage ist in der Registrierung aussehen können:

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

Oder wenn Sie Ihren eigenen Assembly Pfad:

Assembly.GetExecutingAssembly().CodeBase;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top