Почему мой источник журнала событий продолжает помещаться в реестре в «Приложение» вместо <log>? - PullRequest
3 голосов
/ 20 июля 2011

Я пытаюсь создать службу Windows, и мне нужно, чтобы она могла записывать в журналы событий. Я добавил компонент EventLog в свой проект службы и установил для свойства Log значение ccs_wscln_log, а для свойства Source - ccs_wscln (то же имя, что и у службы).

Я также создал и установщик для этого проекта. Моя проблема заключается в том, что всякий раз, когда я устанавливаю службу, она создает раздел реестра ccs_wscln в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application когда это ДОЛЖНО быть HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\ccs_wscln_log.
Проблема в том, что при попытке запустить сервис я получаю сообщение об ошибке

"Источник 'ccs_wscln' не зарегистрирован в журнале 'ccs_wscln_log'. (Он зарегистрирован в журнале 'Приложение'). Свойства источника и журнала должны совпадать, или вы можете установить Log в пустую строку, и это будет автоматически сопоставлено с исходным свойством '.

Я обнаружил, что если я удаляю раздел реестра ccs_wscln в папке Application, при запуске службы он запускается и генерирует запись ccs_wscln_log в EventLog. Поэтому мой вопрос: когда я устанавливаю приложение, почему оно автоматически создает запись для меня в разделе «Приложение», и как мне предотвратить это?

Я нашел другой пост в SO, в котором говорилось, что мне нужно перезагрузить компьютер, если я установил его раньше в Application, поэтому я попытался это сделать, но когда я перезагрузил решение, я даже не смог вызвать конструктор, потому что он жаловался что запись в реестре отсутствует и она все равно будет установлена ​​в разделе «Приложение».

Ответы [ 2 ]

1 голос
/ 20 июля 2011

Я создал учебник по созданию службы Windows с нуля, используя C #. Я решаю проблему записи в журнал для конкретного приложения. Подробнее см. Шаг 9 здесь .

0 голосов
/ 24 марта 2012

Я думаю, вам нужно следовать в вашем классе ServiceInstaller.

this.Installers.Clear();

Над кодом должен быть непосредственно перед добавлением ряда установщиков.

Это потому, что EventLogInstaller добавлен по умолчанию. Вызов очистить удалит это. Кроме того, вы можете перебрать коллекцию установщиков, выбрать определенный тип (EventLogInstaller) и назначить ему необходимые имя_сервера и имя источника событий.

...