У меня возникают трудности с надежным созданием/удалением источников событий во время установки моей .Net-службы Windows.
Вот код из моего класса ProjectInstaller:
// Create Process Installer
ServiceProcessInstaller spi = new ServiceProcessInstaller();
spi.Account = ServiceAccount.LocalSystem;
// Create Service
ServiceInstaller si = new ServiceInstaller();
si.ServiceName = Facade.GetServiceName();
si.Description = "Processes ...";
si.DisplayName = "Auto Checkout";
si.StartType = ServiceStartMode.Automatic;
// Remove Event Source if already there
if (EventLog.SourceExists("AutoCheckout"))
EventLog.DeleteEventSource("AutoCheckout");
// Create Event Source and Event Log
EventLogInstaller log = new EventLogInstaller();
log.Source = "AutoCheckout";
log.Log = "AutoCheckoutLog";
Installers.AddRange(new Installer[] { spi, si, log });
Приведенные методы фасада возвращают строки для имени журнала, службы и т.д.
Этот код работает большую часть времени, но недавно после установки я начал получать свои записи в журнале приложений, а не в пользовательском журнале. В журнале также имеются следующие ошибки:
Невозможно найти описание для идентификатора события (0) в источнике (автоопределение). На локальном компьютере могут не отображаться необходимые данные реестра или файлы DLL сообщений, чтобы отображать сообщения с удаленного компьютера. Вы можете использовать флаг /AUXSOURCE = для получения этого описания; см. "Справка и поддержка".
По какой-то причине он либо неправильно удаляет источник во время удаления, либо не создает его во время установки.
Любая помощь с лучшими практиками здесь ценится.
Спасибо!
Кроме того, вот пример того, как я пишу исключения из журнала:
// Write to Log
EventLog.WriteEntry(Facade.GetEventLogSource(), errorDetails, EventLogEntryType.Error, 99);
Относительно ответа stephbu: Рекомендуемый путь - это установщик script и installutil, или программа установки Windows.
Я использую проект установки, который выполняет установку службы и настраивает журнал. Я использую installutil.exe или проект установки Windows, я считаю, что оба они называют тот же самый класс ProjectInstaller, что и выше.
Я вижу, как состояние моего тестового компьютера может вызвать ошибку, если журнал не удаляется до перезагрузки. Я буду экспериментировать больше, чтобы понять, устраняет ли это проблему.
Edit: Я заинтересован в надежном способе регистрации источника и имени журнала во время установки службы. Поэтому, если служба ранее была установлена, она удаляла источник или повторно использовала источник во время последующих установок.
У меня еще не было возможности узнать WiX, чтобы попробовать этот маршрут.