2013-03-20 70 views
4

我有以下代码记录我的Windows服务,我通过在线研究发现。它在我的服务类里被完成,就像下面这样被初始化之前一样。登录时为记录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的任何方向感到非常感激。

回答

6

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

下面是您可以在安装程序中创建事件源:

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

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

UPDATE

从链接:执行服务安装

后,日志是 '注册',但尚未建立。要创建它,必须编写一个事件。如果服务使用受限用户帐户运行,那么该帐户可能没有足够的安全权限来写入第一个日志,因为需要创建日志。

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

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

确保您运行安装程序为管理员。

从您的评论:

服务将无法启动。

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

+0

谢谢你。如果您查看了上面提供的链接,则页面底部有一位用户的评论。我面临同样的问题。服务无法启动。 – user1270384 2013-03-21 00:15:29

+0

添加了可能会导致服务未启动的更新。 – 2013-03-21 04:38:50