Отправка сообщения windows service

Задача: Есть сервис, написанный на C# — нужно отправить сообщение о изменении состояния, после чего сервис должен выполнить нужные методы.
Инструментарий: Visual Studio, C#
Решение: Для реализации данной задачи можно воспользоваться командой ServiceController.ExecuteCommand. Соответственно в сервисе нужно перекрыть метод  ServiceBase.OnCustomCommand.  Обратите внимание, команды можно определять в диапазоне от 128 до 255. Команды, которые расположены ниже 128 — зарезервированы системой.


using System.ServiceProcess;
const int ReloadWorker = 128;
var service = new ServiceController("Service Name");
service.ExecuteCommand(ReloadWorker);
service.WaitForStatus(ServiceControllerStatus.Running);

На стороне Windows сервиса нужно переопределить метод OnCustomCommand

public partial class Service : ServiceBase
{
protected override void OnCustomCommand(int command)
{
const int ReloadWorker = 128;
if (command == ReloadWorker)
{
// ...
}
}
}

PS: Также соответствующие темы есть на stackoverflow How to send a custom command to a .Net windows Service from .Net code? и How to communicate with a windows service?

Добавить комментарий