我有一个基于ServiceBase
的.NET服务:
public partial class Service : ServiceBase
有些东西会停止此服务。在服务停止期间记录的内容与使用SCM的常规停止一致,但是用户声明他没有启动它。我不确定这是否是某种崩溃或用户错误。
由于调用OnStop
方法,我想记录一些诊断信息,以便查看导致停止发生的原因。是否有可能在此时获得此信息?我在寻找:什么是启动停止的用户,从哪个工作站/ IP地址启动,这种东西。有什么想法吗?
答案 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可以解释析构函数问题