Организация связи между приложением и службой
Вот возникла необходимость передать службе некую команду на выполнение ранее прописанных действий.
И приложение, и сервис на одной машине, т.е. связь, будет осуществляться локально.
Каким образом это можно сделать?
Добрый день!
Вот возникла необходимость передать службе некую команду на выполнение ранее прописанных действий.
И приложение, и сервис на одной машине, т.е. связь, будет осуществляться локально.
Каким образом это можно сделать?
Можно по разному.
1 способ: К примеру пусть у тебя есть 3 необходимых действия котрые должна выполнить служба,создаеш 3 Event обекта с помощью CreateEvent давая им уникальные имена. И в отдельном потоке садишся для просмотра состояния этих обектов с помощью WaitForMultipleObjects. А в управляющем приложении открываеш эти 3 заранее тебе известных обекта и когда нужно посылаеш сигнал одному из них . Сервис будет обрабатывать по одному из событий делать определенные действия.
2 способ. Используй представление файла созданного с уникальным именем с помощью CreateFileMapping и один Event. Так же открываеш его хэндл управляемым приложением и пишеш туда команды и данные а Eventу отсылаеш сигнал о приеме данных.
3 способ.Открываеш в сервисе определенный тобой локальный соккет и ждеш команд. Управляющее приложение так же его открывает и шлет туда команды.
4 способ. С помощью Pipe созданных CreatePipe
И т.д.
4 способ. С помощью Pipe созданных CreatePipe
это я так понимаю NamedPipes?
А как с ним работать, может есть ссылки или примеры?
это я так понимаю NamedPipes?
А как с ним работать, может есть ссылки или примеры?
Нет это unnamed pipe а для а для named pipe используют CreateNamedPipe смотри пример здесь:
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dnarw98bk/html/thenamedpipedemomultiplecommunicationchannels.asp
Нет это unnamed pipe а для а для named pipe используют CreateNamedPipe смотри пример здесь:
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/dnarw98bk/html/thenamedpipedemomultiplecommunicationchannels.asp
млин, что-то опять все не просто :) а попроще технологии нет?
а случаем вот на это "unnamed pipe" нет примеров или статей?
есть управляющая команда SERVICE_CONTROL_PARAMCHANGE у меня в службе на нее ничего нет, просто не нужно, ну я туда в обработчик и засунул свой код :)
вот правда наверное не совсем правильно это.
решил вообщем так:
есть управляющая команда SERVICE_CONTROL_PARAMCHANGE у меня в службе на нее ничего нет, просто не нужно, ну я туда в обработчик и засунул свой код :)
вот правда наверное не совсем правильно это.
Почитай получше MSDN у тебя ведь для ControlService кроме существующих кодов управления есть еще свободные значения кодов в пределах от 128 до 256. Вот и вешай на них свои обработчики. типа:
#define SERVICE_CONTROL_MYEVENT_1 128
#define SERVICE_CONTROL_MYEVENT_2 129
... и т.д
и затем
ControlService(hservice,SERVICE_CONTROL_MYEVENT_1,...
Почитай получше MSDN у тебя ведь для ControlService кроме существующих кодов управления есть еще свободные значения кодов в пределах от 128 до 256. Вот и вешай на них свои обработчики. типа:
#define SERVICE_CONTROL_MYEVENT_1 128
#define SERVICE_CONTROL_MYEVENT_2 129
... и т.д
и затем
ControlService(hservice,SERVICE_CONTROL_MYEVENT_1,...
спасибо, уже так сделал, просто времени скинуть на форум не было.
А как выше написал не подходит, т.к. под юзером правов не хватает :)