Взаимодействуете с запущенной службой Windows? - PullRequest
3 голосов
/ 06 мая 2011

Как изменить настройки службы Windows во время ее работы?

Допустим, я обрабатываю файлы из одного каталога в другой. Я хотел бы иметь возможность объявить вывод и операции для следующих файлов (пока служба работает). Было бы идеально, если бы я мог редактировать его удаленно через веб-сайт (таблицы SQL или, возможно, файлы XML / TXT).

Это вообще возможно без перезапуска службы? Могу ли я просто написать внутри службы " для каждой операции чтения файла и вывода из файла настроек "?

Я бы предпочел пока избегать Windows Communication Foundation.

Ответы [ 5 ]

3 голосов
/ 06 мая 2011

Предполагая, что вы также написали Службу Windows, вы можете отправить в службу пользовательскую команду.Со стороны контроллера вы используете ServiceController.ExecuteCommand() для отправки команды.В классе обслуживания вы переопределяете ServiceBase.OnCustomCommand() для обработки команд.

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

2 голосов
/ 06 мая 2011

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

http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

2 голосов
/ 06 мая 2011

yosh - два предложенных вами варианта сработают, служба может несколько раз прочитать файл settings.xml перед обработкой папки. Вы можете поработать с этим удаленно, не перезапуская службу.

1 голос
/ 06 мая 2011

Множество вариантов.Существует множество механизмов межпроцессного взаимодействия, которые вы можете использовать - COM, сокеты, именованные каналы, разделяемая память - для обеспечения административного интерфейса с помощью команды «перечитать ваши настройки».

В качестве альтернативы вы можете использовать службу наблюдениядля изменения файла конфигурации;в Win32 API соответствующая функция - FindFirstChangeNotification();не уверен, что есть управляемый эквивалент, в худшем случае - используйте P / Invoke.

0 голосов
/ 06 мая 2011

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

Я лично рекомендовал бы поиграть с * .config и использовать OpenExeConfiguration . Кроме того, предоставьте несколько методов, которые могут получить доступ к этим настройкам или изменить их, а затем использовать их всякий раз, когда вам нужно это значение.

Наконец, у вас может быть свой собственный XML-файл с этими значениями, который может сохранять / извлекать значения (и даже использовать XmlSerializer ), который можно запрашивать, когда приходит время обрабатывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...