Как программно передать аргументы методу OnStart службы Windows?

Как программно передать аргументы методу OnStart службы, которые мне в дальнейшем нужно передать в событие Elapsed таймера внутри службы?

Ответов (2)

Решение

На простейшем уровне: когда вы вызываете ServiceBase.Run, вы можете дать ему выполнить экземпляры службы. Просто объявите это как общедоступное свойство в своей службе и назначьте перед вызовом Run :

        Service1 myService = new Service1();
        myService.SomeProp = 1;
        ServiceBase.Run(myService);

Тогда прочтите SomeProp в своем сервисе:

    public int SomeProp { get; set;}
    protected override void OnStart(string[] args)
    {
        int prop = SomeProp;
    }

Вы также можете использовать аргументы службы, но это от внешнего вызывающего абонента (регистрация службы), а не программно (в соответствии с вопросом).

Вы можете подумать о том, чтобы метод OnStart считывал аргументы из файла конфигурации и программно обновлял их, используя либо отдельное приложение.