Как я могу получить ServiceName в службе Windows, написанной на C #? - PullRequest
2 голосов
/ 11 января 2011

Как я могу получить имя службы программно, используя this.ServiceName в службе Windows, написанной на C #?Когда я пытаюсь это сделать, он запрашивает ссылку на сборку, но ничего не принимает:

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

, но получает ошибку.

Ответы [ 3 ]

4 голосов
/ 11 января 2011

Ваша служба должна наследовать 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 () (класс Program), то вы можете сделать что-то вроде этого:

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

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

            string serviceName = _servicesToRun[0].ServiceName;

            ServiceBase.Run(_servicesToRun);
        }
    }
}
3 голосов
/ 11 января 2011

Чтобы найти файл .config для вашей службы, не используйте имя службы.Это не то, как работает CLR, он выбирает файл .config на основе имени EXE.Исправить:

 var path = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
0 голосов
/ 11 января 2011

Для доступа к файлу конфигурации вам нужно имя приложения, а не имя службы (если вы используете стандартные файлы конфигурации приложения .Net).

Чтобы получить исполняемый файл приложения, используйте System.AppDomain.CurrentDomain.FriendlyName

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...