繁体   English   中英

记录Windows服务

[英]Logging Windows Service

我有以下代码用于记录通过在线研究发现的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服务还是很陌生,并且非常感谢在项目安装程序中创建日志,从服务CS页面写入日志或在log4net上进行任何提示的任何指导。

您的顾问是正确的,在服务中执行此操作是个坏主意。

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

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

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

更新

从链接:

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

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

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

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

根据您的评论:

服务无法启动。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM