我创建了一个监视目录的 Windows 服务。当一个文件被转储到其中时,它会获取数据并将其放入数据库中。然后这个文件被移动到另一个目录并被删除。它在调试模式下工作正常。但是当我将它安装在我的计算机上时,它会在将数据放入数据库后停止,并且有问题的文件既不会移动也不会删除。我怀疑涉及许可问题。我试图创建一个事件日志:
public Service1()
{
InitializeComponent();
if (!System.Diagnostics.EventLog.SourceExists("MySource"))
{
System.Diagnostics.EventLog.CreateEventSource(
"MySource", "MyNewLog");
}
eventLog1.Source = "MySource";
eventLog1.Log = "MyNewLog";
}
所以我有三个问题。(1) 什么可能导致我的服务按照调试中的描述工作,但在我的计算机上安装时失败。(2) 我已经启动了如上所示的事件日志。但是我是否需要添加其他代码来记录我的服务停止事件。我认为这将在“覆盖 onShutdown”方法中完成。(3) 最后,当我的服务停止时,我想查看事件日志。但是我不知道该怎么做,是在管理工具中吗?存储为某个目录上的文件?
这是对这篇文章的编辑,以代替下面给出的感激建议。
try
{
File.Move(e.FullPath, finalString);
File.Delete(e.FullPath);
}
catch(Exception q)
{
EventLog.WriteEntry("MySource", q.ToString(), EventLogEntryType.Error);
using (StreamWriter w = new StreamWriter(ConfigurationManager.AppSettings["fmd"], true))
{
w.Write(DateTime.Now.ToString("dd-MM-yyyy_hh-mm-ss"));
w.Write(q.ToString());
}
}
根据建议,我在文件移动和删除周围放置了一个 try-catch,并且我添加了一个 OnShutdown 方法:
protected override void OnShutdown()
{
using (StreamWriter w = new StreamWriter(ConfigurationManager.AppSettings["ond"], true))
{
w.Write("stop OnShutdown");
}
//EventLog.WriteEntry("MySource", message, EventLogEntryType.Error);
}
我不知道如何将任何系统错误消息传递给关闭方法,因此任何建议表示赞赏。当我将修改后的代码安装为服务时,它在移动或删除文件之前再次停止。我通过流访问的两个日志都没有记录任何内容。另外,事件查看器也没有显示任何内容?