Я следуя инструкции:Как я могу зарегистрировать журнал событий и написать ему первоначальное сообщение при установке службы?
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#, чтобы заставить это работать)
Как я могу зарегистрировать журнал и написать ему начальное сообщение при установке сервиса?
Это похоже на правду ... Если я изменил строку имени службы на нечто совершенно новое, например TestService123, оно построит и создаст файл TestService123.evtx в% SystemRoot% \ System32 \ winevt \ Logs для этого. Однако моя первоначальная строка (TestService) никогда не создавала файл evtx ... Любые указатели на то, как я могу удалить службу, которая по существу является призраком сейчас? – Alex
Такая же проблема здесь: не удается удалить источник журнала призрака или создать одно имя. –