C# 安装Windows服务时是否需要手动创建Windows事件日志源

C# 安装Windows服务时是否需要手动创建Windows事件日志源,c#,.net,windows-services,event-log,C#,.net,Windows Services,Event Log,我用C#开发了一个Windows服务。我已经用VisualStudio2008创建了一个安装程序,用于安装Windows服务。到目前为止一切都很好。我希望确保事件源已在安装时创建,以便运行时的任何错误/异常情况都正确记录到Windows事件日志中 事件源是作为windows服务安装(和卸载)的一部分自动创建(和删除)的,还是我必须自己处理并创建自定义操作来创建和删除它,如下所示 protected override void OnBeforeInstall(IDictionary savedSt

我用C#开发了一个Windows服务。我已经用VisualStudio2008创建了一个安装程序,用于安装Windows服务。到目前为止一切都很好。我希望确保事件源已在安装时创建,以便运行时的任何错误/异常情况都正确记录到Windows事件日志中

事件源是作为windows服务安装(和卸载)的一部分自动创建(和删除)的,还是我必须自己处理并创建自定义操作来创建和删除它,如下所示

protected override void OnBeforeInstall(IDictionary savedState)
{
    base.OnBeforeInstall(savedState);

    if (!EventLog.SourceExists(ServiceName))
        EventLog.CreateEventSource(ServiceName, "Application");
}

protected override void OnAfterUninstall(IDictionary savedState)
{
    base.OnAfterInstall(savedState);

    if (EventLog.SourceExists(ServiceName))
        EventLog.DeleteEventSource(ServiceName);
}

您应该在安装期间注册它们,因为服务帐户在运行时可能没有这样做的权限::

默认情况下,如果您尝试编写 未经注册而进入 您的组件作为有效源 系统自动注册 使用 源属性的值作为 源字符串。通常,创建 事件期间的新事件源 安装您的应用程序。这 为操作系统留出时间 刷新其已注册用户列表 事件源及其配置。 如果操作系统没有 刷新其事件源列表 您试图用 新的源,写操作 将失败。如果正在创建源 在安装期间,不可选择, 然后尝试创建源井 在第一次写入操作之前, 也许在你申请的时候 初始化。如果你选择这个 方法,请确保您的初始化 代码正在与管理员一起运行 计算机上的权限。这些权利 创建新事件时需要 来源


幸运的是,正如您已经发现的那样,这使它变得非常简单。

在我看来,就像
ServiceInstaller
在安装过程中自动创建了一个与服务同名的数据源,因此不需要任何额外的代码

从文件中

执行安装时,它会自动创建EventLogInstaller以安装与ServiceBase派生类关联的事件日志源。此源的Log属性由ServiceInstaller构造函数设置为计算机的应用程序日志。设置ServiceInstaller的ServiceName(应与服务的ServiceBase..::.ServiceName相同)时,源将自动设置为相同的值。在安装失败时,源的安装将与以前安装的服务一起回滚