.NET 4, написание службы Windows для ведения журнала и мониторинга каталогов

#.net #logging #windows-services

#.net #ведение журнала #windows-services

Вопрос:

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

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

1) Ведение журнала, похоже, больше не происходит; файл конфигурации больше не читается, или ведение журнала невозможно по какой-либо другой причине (разрешения?). В любом случае, я подумал, каков наилучший способ входа в систему для службы Windows, возможно, через ведение журнала событий Windows? И как? Или лучше заставить мой конфигурационный файл работать, чтобы я мог отключить ведение журнала без перекомпиляции?

2) В службе я использую набор объектов FileSystemWatcher для мониторинга каталогов. Похоже, что в службе я больше не получаю события мониторинга. Есть какие-нибудь подсказки?

Спасибо

редактировать: шаг вперед к пункту 2) — После отладки я обнаружил, что получаю события, проблема в том, что в случае, если я попытаюсь переместить файл с помощью File.Move , произойдет сбой.

правка 2: Еще один маленький шаг вперед к пункту 2) — Мне пришлось установить службу с правами пользователя, иначе она не позволит мне переместить файл. Это решаемая проблема.

Комментарии:

1. Где хранится ваш файл журнала? Да, службы Windows работают под другой моделью разрешений. Это трудно диагностировать без конкретной информации о вашей конфигурации.

2. вы имеете в виду выходной файл? она должна размещаться в том же каталоге, где находится exe-файл службы (после компиляции, но, вероятно, во время установки службы она перемещается куда-то еще).

Ответ №1:

В вашем сообщении больше одного вопроса.

Одна из возможных причин, по которой вы не видите журналы, возможно, вы смотрите не в том месте. Службы запускаются с текущего рабочего каталога как %systemroot% system32, поэтому он попытается создать журналы там.

Комментарии:

1. да, но журнала там нет. Я подозреваю, что он даже не читает файл конфигурации.

2. Один из быстрых способов узнать, пытается ли она записать журнал, — это запустить Process Monitor ( technet.microsoft.com/en-us/sysinternals/bb896645 ) и анализ операций файловой системы. Если служба запускается как сетевая служба или с использованием учетной записи пользователя, не являющегося администратором, ей не удастся создать файл в каталоге system32.

3. В дополнение к этому, если ваш процесс обслуживания 32-разрядный, а ОС 64-разрядная, вы также можете проверить %systemroot%Syswow64.