Взаимодействие с запущенной службой Windows?



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



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



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



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

564   5  

5 ответов:

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

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

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

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

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

Много вариантов. Существует множество механизмов межпроцессной связи, которые можно использовать - COM, сокеты, именованные каналы, общая память-для обеспечения административного интерфейса командой "re-read your settings".

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

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

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

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

Comments

    Ничего не найдено.