C#中级-通过注册表读取Windows 瑟维斯(Service)(Service)程序执行路径

一、前言

      
如若大家的C#缓解方案中有四个程序行使,如:Web应用、控制台程序、WPF程序接纳和Windows服务应用。

        那么那几个非Windows
瑟维斯(Service)应用程序怎么在代码中找到Windows服务应用的进行路径呢?

 

二、正文

       若是该Windows
服务一度起步,名称叫Socket瑟维斯(Service)(Service)。

        Step1:
你要反省本地运行的Windows服务中是或不是有叫Socket瑟维斯(Service)(Service)的服务;

        Step2:
读取注册表,在该地运行的Windows服务都会产出在登记表中,大家通过劳动名称找到该注册表音信;

        Step3:
读取注册表音讯的ImagePath即可取得该Windows服务的履行路径。

using System.ServiceProcess; //需要添加引用

public static string GetFilePathFromService(string serviceName)
{
      try
      {
          ServiceController[] services = ServiceController.GetServices();
          var socketService = services.FirstOrDefault(x => String.Equals(x.ServiceName, "SocketService"));
          if (socketService != null)
          {
              var key = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\" + serviceName);
              if (key != null)
              {
                   var serviceExePath = GetString(key.GetValue("ImagePath").ToString());
                   var folderPath = Path.GetDirectoryName(serviceExePath);
                   if (!String.IsNullOrEmpty(folderPath) && Directory.Exists(folderPath))
                   {
                        return folderPath;
                   }                    
              }
          }
       }
       catch(Exception ex)
       {
            return null;
       }
       return null;
}

 

三、结尾

      
近来多少忙,Webgl前边三章估摸要拖更了。。。难堪。