c# windows服務如何擷取自己的安裝路徑

來源:互聯網
上載者:User

由於windows服務安裝時,系統會自動將windows服務的程式檔案複製到系統目錄下,通常是System32目錄下,windows服務的運行目錄就是系統目錄,有時候,windows服務在運行時需要知道自己的安裝目錄,比如,windows服務運行時所需要的一些資源檔,通常可能是一些聲音或影像檔,這些資源檔是位於安裝目錄下的,只有windows服務知道了安裝目錄,才能對這些資源檔進行訪問,那麼windows服務如何知道自己的安裝目錄的資訊呢,一種比較簡單的做法是通過訪問註冊表。

如,是一個名字叫MazeServer的服務,通過服務管理員察看屬性,注意,其中的“可執行檔的路徑”一欄所記錄的就是服務的鏡像路徑

windows服務在安裝後,會在系統註冊表中進行記錄,以上面提到的MazeServer為例,通過運行登錄編輯程式(regedit)可以找到如下索引值:

/HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/MazeServer

開啟該鍵可以看到其下面的項,

其中那個 ImagePath的項的值就是我們需要得到的資訊。由此,我們可以知道,只要我們能夠從系統註冊表中找到對應的鍵讀取ImagePath的項就可以得到安裝路徑資訊。提供如下類供參考。Windows服務的安裝路徑

在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();

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.