Подробнее здесь . Следующее должно работать как минимум в Visual Studio 2017 и Visual Studio 2019.
- В обозревателе решений Visual Studio дважды щелкните компонент службы, т. Е. Компонент, производный от
ServiceBase
. В результате откроется компонент в представлении [Дизайн]. - При открытом представлении [Дизайн] откройте сетку свойств, нажав клавишу F4 (или View | Properties Window из меню).
- В сетке свойств установите для свойства AutoLog значение
false
. Это предотвратит запись событий по умолчанию в журнал приложений Windows. - Если вы этого еще не сделали, щелкните правой кнопкой мыши в любом месте представления [Дизайн] служебного компонента и выберите Добавить установщик опция меню. Это добавляет компонент к вашему решению с именем
ProjectInstaller
по умолчанию. - Обратите внимание, что новый
ProjectInstaller
автоматически открывается для соответствующего представления [Design]. Чтобы получить его код, щелкните правой кнопкой мыши файл ProjectInstaller.cs в обозревателе решений и выберите пункт меню «Просмотр кода». - Измените содержимое этого файла, чтобы оно выглядело следующим образом. Это обновляет
EventLogInstaller
для использования выбранного вами имени журнала.
using System.ComponentModel;
using System.Configuration.Install;
using System.Diagnostics;
namespace YourProjectNamespace
{
[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
public ProjectInstaller()
{
InitializeComponent();
EventLogInstaller installer = FindInstaller(this.Installers);
if (installer != null)
{
installer.Log = "YourEventLogName"; // enter your event log name here
}
}
private EventLogInstaller FindInstaller(InstallerCollection installers)
{
foreach (Installer installer in installers)
{
if (installer is EventLogInstaller)
{
return (EventLogInstaller)installer;
}
EventLogInstaller eventLogInstaller = FindInstaller(installer.Installers);
if (eventLogInstaller != null)
{
return eventLogInstaller;
}
}
return null;
}
}
}
Последний шаг - это включение ie сервисного компонента в журнал пользовательских событий, который вы назвали на шаге 6. Для этого щелкните правой кнопкой сервисный компонент в обозревателе решений и выберите пункт меню «Просмотр кода». Обновите конструктор до следующего:
public YourServiceName()
{
InitializeComponent();
// This ties the EventLog member of the ServiceBase base class to the
// YourEventLogName event log created when the service was installed.
EventLog.Log = "YourEventLogName";
}
При установке службы в системе должно быть создано
YourEventLogName . Если программа просмотра событий уже открыта, вам, вероятно, придется обновить ее sh. Если он все еще не виден, возможно, вам нужно что-то записать в него (я не помню подробности). В любом случае, чтобы записать информацию журнала в пользовательский журнал событий из вашей службы, используйте элемент
EventLog
компонента службы, например,
protected override void OnStart(string[] args)
{
EventLog.WriteEntry("The service was started successfully.", EventLogEntryType.Information);
}
protected override void OnStop()
{
EventLog.WriteEntry("The service was stopped successfully.", EventLogEntryType.Information);
}
protected override void OnShutdown()
{
EventLog.WriteEntry("The service was shutdown successfully", EventLogEntryType.Information);
}