如下圖,是一個名字叫MazeServer的服務,通過服務管理器察看屬性,注意,其中的“可執行文件的路徑”一欄所記錄的就是服務的鏡像路徑
windows服務在安裝後,會在系統註冊表中進行記錄,以上面提到的MazeServer爲例,通過運行註冊表編輯器(regedit)可以找到如下鍵值:
/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/MazeServer
打開該鍵可以看到其下面的項,如圖:
在Windows服務中需要獲得當前服務所在的路徑時,不能簡單的使用Environment.CurrentDirectory來獲得當前路徑,因爲windows服務所啓動的目錄都是在c:/windows/system32。如果在你的服務中需要檢測某個配置文件時,你無法獲得這個配置文件的路徑。這時有2種解決方案:
一、就是將你的配置文件安裝在system32目錄下
二、在你的服務中通過註冊表來獲得這個服務的安裝路徑
Windows服務在系統安裝後會在註冊表的 "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[ServiceName]"下以服務的ServiceName建1個目錄,目錄中會有"ImagePath"節,這裏保存的就是該服務的安裝路徑。
*/
/// <summary>
/// 獲取服務安裝路徑
/// </summary>
/// <param name="ServiceName"></param>
/// <returns></returns>
public static string GetWindowsServiceInstallPath(string ServiceName)
{
string key = @"SYSTEM\CurrentControlSet\Services\" + ServiceName;
string path = Registry.LocalMachine.OpenSubKey(key).GetValue("ImagePath").ToString();
//替換掉雙引號
path = path.Replace("\"", string.Empty);
FileInfo fi = new FileInfo(path);
return fi.Directory.ToString();
}