Выход службы Windows не отображается в журнале событий - PullRequest
6 голосов
/ 24 сентября 2011

Я пытаюсь выполнить это пошаговое руководство .

Я использую Visual Studio 2010 Premium.

Единственные события, которые я вижу в обозревателе серверов или в окне просмотра событий«Служба запущена успешно.»и «Служба успешно остановлена».

Вот код службы:

namespace MyNewService
{
    public partial class MyNewService : ServiceBase
    {
        public MyNewService()
        {
            InitializeComponent();
            if (!EventLog.SourceExists("MySource"))
            {
                EventLog.CreateEventSource("MySource", "MyNewLog");
            }
            eventLog1.Source = "MySource";
            eventLog1.Log = "MyNewLog";
        }

        protected override void OnStart(string[] args)
        {
            eventLog1.WriteEntry("In OnStart");
        }

        protected override void OnStop()
        {
            eventLog1.WriteEntry("In onStop.");
        }
    }
}

Ответы [ 3 ]

2 голосов
/ 20 марта 2014

У меня была такая же проблема с Visual Studio 2010 Professional на Win 7 64. Моя недавно скомпилированная служба была установлена ​​с InstallUtil.exe, работающим от имени администратора. Все началось и остановилось правильно. Никаких исключений, но никакое количество обновления Event Viewer не обнаружило новый журнал событий. Предложение Fran71 сработало для меня: я закрыл окно просмотра событий и снова открыл. Вуаля, недавно созданный файл журнала приложения появился.

1 голос
/ 02 февраля 2014

FWIW, я столкнулся с этой проблемой в Win8 и обнаружил, что при обновлении средства просмотра событий не появляется мой недавно созданный журнал событий, а закрытие и повторное открытие средства просмотра событий. Это сводило меня с ума, потому что не возникало никаких исключений при создании источника события или записи в журнале.

0 голосов
/ 24 сентября 2011

Вероятно, проблема с разрешениями.Как сказал комментатор, попробуйте запустить VStudio или ваш скомпилированный сервис от имени администратора.

Кроме того, вы все равно можете отлаживать сервис - поставьте нить. Спите (до 20 секунд) в качестве первой строки (чтобы дать себевремя присоединить отладчик), затем установите точку останова на линии после этого.Затем перейдите в Инструменты -> Присоединить к процессу и выберите свой .exe.Если вы сделаете это до конца вашего Thread.Sleep (), вы должны прервать работу.

Имейте в виду, что служба должна завершить OnStart в течение 30 секунд IIRC, иначе Windows решит, что она не отвечает и убиваетваш процесс, поэтому перенесите код из запуска службы, если вы собираетесь делать много отладки.Просто добавьте туда таймер или что-то в этом роде.

Чтобы упростить отладку, подумайте о переносе своей функциональности в DLL, а затем оставьте в своем сервисе достаточно кода, чтобы вызывать его в DLL - это облегчит модульное тестирование иотладка - но не забывайте, что многое меняется, когда вы фактически запускаете его как сервис.

...