检索在OnStop中停止.NET服务的原因

时间:2009-10-06 23:13:02

标签: .net windows-services version-control

我有一个基于ServiceBase的.NET服务:

public partial class Service : ServiceBase

有些东西会停止此服务。在服务停止期间记录的内容与使用SCM的常规停止一致,但是用户声明他没有启动它。我不确定这是否是某种崩溃或用户错误。

由于调用OnStop方法,我想记录一些诊断信息,以便查看导致停止发生的原因。是否有可能在此时获得此信息?我在寻找:什么是启动停止的用户,从哪个工作站/ IP地址启动,这种东西。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在运行服务的计算机上的系统事件日志中,应该有关闭服务的事件。事件的详细信息将列出发起停止请求的用户。

您可以通过代码访问事件日志,但是我不确定您是否可以捕获与在其OnStop方法中关闭服务相关联的事件信息。如果你想尝试一下,你可以根据自己的情况调整一些代码 -

       foreach (EventLog logs in System.Diagnostics.EventLog.GetEventLogs())
       {
            if (logs.LogDisplayName.ToUpper() == "SYSTEM")
            {
                foreach (EventLogEntry logEntry in logs.Entries)
                {
                    if(logEntry.TimeGenerated >= DateTime.Now.AddMinutes(-2))
                    {
                        Console.WriteLine("User: {0} Message: {1}", logEntry.UserName, logEntry.Message);
                    }
                }
            }
        }

答案 1 :(得分:0)

所有,问题是:在一个类的析构函数中抛出异常。显然,不可能拦截这样的事件。感谢大家在这个问题上花时间。

This thread可以解释析构函数问题