C# 记录Windows服务

C# 记录Windows服务,c#,logging,windows-services,log4net,event-log,C#,Logging,Windows Services,Log4net,Event Log,我有下面的代码来记录我的windows服务,这是我通过在线研究发现的。 它是在我的服务类中完成的,在初始化之前,如下所示 public GBBInvService() { InitializeComponent(); if (!System.Diagnostics.EventLog.SourceExists("MyLogSource")) System.Diagnostics.EventLog.Cre

我有下面的代码来记录我的windows服务,这是我通过在线研究发现的。 它是在我的服务类中完成的,在初始化之前,如下所示

public GBBInvService()
        {
            InitializeComponent();
            if (!System.Diagnostics.EventLog.SourceExists("MyLogSource"))
                System.Diagnostics.EventLog.CreateEventSource("MyLogSource",
                                                                      "MyDoLog");
            eventLog1.Source = "MyLogSource";
            eventLog1.Log = "MyDoLog";
        }
记录时的代码:

eventLog1.WriteEntry("GBBInvService Service Started");
然而,我们的顾问建议我不要这样做。他的评论如下:

我会避免让服务在运行时创建事件源。这要求服务以高权限运行(即比实际需要更多的计算机访问权限)。设置Windows事件日志源实际上是一项安装时工作。您可以将事件日志安装程序添加到项目安装程序文件(以及服务安装程序),然后事件源将始终存在


这个建议的问题是,我没有找到在项目安装程序文件中创建日志的任何示例。我还尝试将此日志创建部分移动到我的项目安装程序中,但它不允许我从web服务cs页面调用或写入eventlog1。他还建议使用log4net,但这对我来说是新事物,掌握起来相当复杂。我对windows服务还很陌生,刚刚完成了我的第一个windows服务项目,如果能在project installer中创建日志,从我的服务cs页面或log4net上的任何提示向它写信,我将非常感激

您的顾问是正确的,在服务中这样做是个坏主意

以下是如何在安装程序中创建事件源:

短版本:子类安装程序,并在子类安装程序的构造函数中创建事件日志源

更新

从链接:

执行服务安装程序后,日志已“注册”,但尚未创建。要创建它,必须编写一个事件。如果服务使用受限用户帐户运行,则该帐户可能没有足够的安全权限写入第一个日志,因为需要创建日志

示例代码没有显示正在编写的一个事件。确保你正在这样做

安装服务时,用户必须以管理员身份运行安装程序

确保以管理员身份运行安装程序

根据您的评论:

服务无法启动


在事件日志中查找未启动的原因。可能它引发了异常,例如,如果您没有在安装程序中编写一个事件,或者您没有以管理员身份运行安装程序。

谢谢。如果您查看了上面提供的链接,页面底部会有一个用户的评论。我也面临同样的问题。服务无法启动。添加的更新可能导致服务无法启动。