2013-08-12 1 views
2

Я следуя инструкции:Как я могу зарегистрировать журнал событий и написать ему первоначальное сообщение при установке службы?

http://msdn.microsoft.com/en-us/library/9k985bc9.aspx - Как создать услуги

http://msdn.microsoft.com/en-us/library/ddhy0byf.aspx - Как добавить установщик в приложение Service

я установить службу, используя повышенное окно командной строки и команда installutil.exe -i WindowsService1.exe

Это сборка и установка сервиса и все отлично.

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

Так что я добавить следующие строки в код инсталлятора (projectinstaller.cs)

public ProjectInstaller() 
{ 
    InitializeComponent(); 

    if (!System.Diagnostics.EventLog.SourceExists("TestService")) 
    { 
     System.Diagnostics.EventLog.CreateEventSource(
      "TestService Service", "TestService"); 
    } 
    System.Diagnostics.EventLog TestEventLog = new System.Diagnostics.EventLog(); 
    TestEventLog.Source = "TestService ServiceInstaller"; 
    TestEventLog.Log = "TestService"; 

    TestEventLog.WriteEntry("New log created"); 
} 

Это все еще строит, но теперь installutil.exe -i WindowsService1.exe (по-прежнему работать с повышенными привилегиями) выдает следующее сообщение об ошибке:

An exception occurred during the Install phase. 
System.InvalidOperationException: Unable to create an instance of the WindowsService1.ProjectInstaller installer type. 
The inner exception System.Reflection.TargetInvocationException was thrown with the following error message: Exception has been thrown by the target of an invocation.. 
The inner exception System.ArgumentException was thrown with the following error message: Log TestService has already been registered as a source on the local computer.. 

Google заставило меня поверить, что это некоторая форма ошибки разрешения при создании журналов Windows RE, и привело меня к решению, которое включает в себя ручную запись материала в реестр. Я бы предпочел не гасить в реестре, если есть лучший способ сделать это (например, родной способ C#, чтобы заставить это работать)

Как я могу зарегистрировать журнал и написать ему начальное сообщение при установке сервиса?

ответ

3

Исключение укажет точно какая проблема. Последняя строка гласит:

The inner exception System.ArgumentException was thrown with the following error message: Log TestService has already been registered as a source on the local computer..

Вы пытаетесь создать источник, который уже существует.

Подробнее см. my answer to a similar question.

+2

Это похоже на правду ... Если я изменил строку имени службы на нечто совершенно новое, например TestService123, оно построит и создаст файл TestService123.evtx в% SystemRoot% \ System32 \ winevt \ Logs для этого. Однако моя первоначальная строка (TestService) никогда не создавала файл evtx ... Любые указатели на то, как я могу удалить службу, которая по существу является призраком сейчас? – Alex

+0

Такая же проблема здесь: не удается удалить источник журнала призрака или создать одно имя. –

Смежные вопросы