У меня проблемы с надежным созданием / удалением источников событий во время установки моей .Net Windows Service.
Вот код из моего класса 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) в источнике (AutoCheckout) не может быть найдено. Локальный компьютер может не иметь необходимой информации реестра или файлов DLL сообщений для отображения сообщений с удаленного компьютера. Вы можете использовать флаг / AUXSOURCE =, чтобы получить это описание; см. Помощь и Поддержка для деталей.
По какой-то причине он либо неправильно удаляет источник во время удаления, либо не создает его во время установки.
Любая помощь с лучшими практиками здесь приветствуется.
Спасибо!
Кроме того, вот пример того, как я пишу исключения в журнал:
// Write to Log
EventLog.WriteEntry(Facade.GetEventLogSource(), errorDetails, EventLogEntryType.Error, 99);
Относительно ответа stephbu: Рекомендуемый путь - это скрипт установщика и installutil или подпрограмма установки Windows.
Я использую проект установки, который выполняет установку службы и настраивает журнал. Использую ли я installutil.exe или проект установки Windows, я считаю, что они оба вызывают один и тот же класс ProjectInstaller, который я показал выше.
Я вижу, как состояние моего тестового компьютера могло вызывать ошибку, если журнал действительно не был удален до перезагрузки. Я буду экспериментировать больше, чтобы увидеть, решит ли это проблему.
Edit:
Меня интересует надежный способ регистрации источника и имени журнала при установке сервиса. Поэтому, если служба была ранее установлена, она удалила бы источник или использовала бы его повторно при последующих установках.
У меня еще не было возможности изучить WiX, чтобы попробовать этот маршрут.