如何在用C#编写的Windows服务中获取ServiceName?

时间:2011-01-11 11:58:22

标签: c# .net windows-services

如何在使用C#编写的Windows服务中使用this.ServiceName以编程方式获取服务名称?当我尝试这个时,它要求汇编参考,但它不接受任何东西:

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

但它的错误。

3 个答案:

答案 0 :(得分:4)

您的服务需要从ServiceBase继承System.ServiceProcess.dll

如果您拥有,您将能够访问this.ServiceName财产。

样品:

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

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

    protected override void OnStop()
    {
    }
}

如果你想从Main()(程序类)访问它,那么你可以这样做:

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

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

            string serviceName = _servicesToRun[0].ServiceName;

            ServiceBase.Run(_servicesToRun);
        }
    }
}

答案 1 :(得分:3)

要查找服务的.config文件,请使用服务名称。这不是CLR的工作方式,它根据EXE名称选择.config文件。修正:

 var path = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

答案 2 :(得分:0)

要访问配置文件,您需要应用程序名称而不是服务名称(如果您使用的是标准.Net应用程序配置文件)。

要获取应用程序可执行文件,请使用System.AppDomain.CurrentDomain.FriendlyName