#.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.