Приложение-служба Windows, которое может динамически принимать консольные команды


Я просто хотел внести свой вклад в проект, над которым работаю. В принципе, я создаю сервис, который отслеживает и обрабатывает новые файлы в каталоге, указанном конфигурационным файлом и другими параметрами через командную строку. Он также должен выводить текст через командную строку, т. е. когда пользователь вводит " -help", он будет отображать его использование. Цель состоит также в том, чтобы сделать его таким, чтобы пользователь мог изменять конфигурационный файл на лету, поэтому служба будет постоянно отслеживать конфигурацию подать заявку на изменения и соответствующим образом скорректировать.

Задача, которую я вижу, заключается в том, чтобы объединить возможность ввода команд через командную строку, вывод вывода, Как если бы это было консольное приложение, и заставить службу обрабатывать эти команды, пока она работает в Диспетчере управления службами. До сих пор в моих исследованиях решения, на которые я наткнулся, кажется, показывают, как создать приложение Службы Windows, которое также может работать как консольное приложение, но оно либо работает как одно, либо другое, только не оба. Любые предложения или вклад приветствуются.

Обновление:

Спасибо всем за ваши предложения, я сделал некоторые чтения на различных механизмах IPC, поддерживаемых Windows. Я свел свои варианты к сопоставлению файлов, именованным каналам и RPC. Я предполагаю, что на данный момент приложение Службы Windows и приложение вспомогательной консоли будут находиться на одном компьютере и им не нужно будет общаться по сети. Сначала я посмотрю на именованные трубы.

2 3

2 ответа:

Сервис должен предлагать возможность взаимодействовать с ним, но это не может быть сделано напрямую, это должно быть сделано с помощью какого-то IPC (inter process communication), это может быть .NET Remoting, WCF, tcp/ip. Вам придется написать вспомогательную программу, которая анализирует командную строку и использует этот IPC для отправки команд в службу, которая может действовать соответствующим образом при ее получении.

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