繁体   English   中英

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

[英]How can I get the ServiceName in a Windows Service written in C#?

如何在C#编写的Windows服务中使用this.ServiceName以编程方式获取服务名称? 当我尝试此操作时,它要求提供程序集引用,但不接受任何内容:

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

但它得到错误。

您的服务需要从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()
    {
    }
}

如果要从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);
        }
    }
}

要为您的服务找到.config文件,请不要使用服务名称。 这不是CLR的工作方式,它会根据EXE名称选择.config文件。 固定:

 var path = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM