wie physischen Pfad von Windows-Dienst mit .net zu bekommen?
-
02-10-2019 - |
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.
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