2011-01-11 25 views
2

如何以編程方式在使用C#編寫的Windows服務中使用this.ServiceName獲取服務名稱?當我嘗試這個,它是要求組裝參考,但它不接受任何東西:如何獲取用C#編寫的Windows服務中的ServiceName?

string path = this.ServiceName + ".config"; 

但它會得到錯誤。

+1

你會得到什麼錯誤? – HABJAN 2011-01-11 12:04:31

+0

你能告訴我們你得到的確切錯誤是什麼嗎?如果編譯器給你一個錯誤,那麼發佈它就像它出現一樣很有幫助。這給了我們更多的信息,而不僅僅是「它的錯誤」。 – 2011-01-11 12:05:03

回答

4

您的服務需要從System.ServiceProcess.dll繼承ServiceBase

當您擁有該產品時,您將可以訪問this.ServiceName屬性。

樣品:

public partial class Service1 : ServiceBase 
{ 
    public Service1() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     string test = this.ServiceName; 
    } 

    protected override void OnStop() 
    { 
    } 
} 

如果你想從主()(計劃類)訪問它,那麼你可以做這樣的事情:

namespace WindowsService1 
{ 
    static class Program 
    { 
     static ServiceBase[] _servicesToRun; 

     static void Main() 
     { 
      _servicesToRun = new ServiceBase[] 
      { 
       new Service1() 
      }; 

      string serviceName = _servicesToRun[0].ServiceName; 

      ServiceBase.Run(_servicesToRun); 
     } 
    } 
} 
0

要訪問配置文件,您需要的應​​用程序名稱不是服務名稱(如果您使用的是標準的.Net應用程序配置文件)。

要獲取應用程序的可執行使用System.AppDomain.CurrentDomain.FriendlyName

3

要查找config文件你的服務,做不是使用服務名稱。這不是CLR的工作方式,它根據EXE名稱選擇.config文件。修復:

var path = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile; 
相關問題