Задача: Есть сервис, написанный на 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?