【问题标题】:Logging Windows Service记录 Windows 服务
【发布时间】:2013-03-20 23:56:24
【问题描述】:

我有以下代码用于记录我通过在线研究找到的 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");

但是,我们的顾问建议我不要这样做。他的cmets如下:

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

这个建议的问题是我无法找到在项目安装程序文件中创建日志的任何示例。我还尝试将此日志创建部分移动到我的项目安装程序中,但它不会让我从我的 Web 服务 cs 页面调用或写入 eventlog1。他还建议使用 log4net,但这对我来说是新事物,而且很难掌握。我刚刚完成了我的第一个 Windows 服务项目,我对 Windows 服务仍然很陌生,并且非常感谢在项目安装程序中创建日志、从我的服务 cs 页面或 log4net 上的任何提示中写入日志的任何方向。

【问题讨论】:

    标签: c# logging windows-services log4net event-log


    【解决方案1】:

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

    在安装程序中创建事件源的方法如下:

    http://blogs.msdn.com/b/helloworld/archive/2008/12/11/creating-an-event-log.aspx?Redirected=true

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

    更新

    来自链接:

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

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

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

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

    来自您的评论:

    服务无法启动。

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

    【讨论】:

    • 谢谢你。如果您查看上面提供的链接,页面底部就会有用户的评论。我遇到了同样的问题。服务无法启动。
    • 添加了可能导致服务未启动的更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    相关资源
    最近更新 更多