一、前言 假設我們的C#解決方案中有多個程式應用,如:Web應用、控制台程式、WPF程式應用和Windows服務應用。 那麼這些非Windows Service應用程式怎麼在代碼中找到Windows服務應用的執行路徑呢? 二、正文 假設該Windows 服務已經啟動,名稱叫SocketService ...
一、前言
假設我們的C#解決方案中有多個程式應用,如:Web應用、控制台程式、WPF程式應用和Windows服務應用。
那麼這些非Windows Service應用程式怎麼在代碼中找到Windows服務應用的執行路徑呢?
二、正文
假設該Windows 服務已經啟動,名稱叫SocketService。
Step1: 你要檢查本地運行的Windows服務中是否有叫SocketService的服務;
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後面三章估計要拖更了。。。尷尬。