我是Windows服务的新手。我为我的c#Windows服务创建了一个安装程序,并且服务器上的安装(Windows Server 2003)似乎已经起作用。当它启动时,会将Service started successfully
写入日志。当它停止时,它会写Service stopped successfully
。但是,有时服务会在没有向日志写入任何内容的情况下停止运行,因此我会手动启动它。当我稍后查看日志时,它会按预期显示Service started successfully
。奇怪的是,在日志中连续两次看到它显然缺少一个服务以某种方式停止运行的条目。
可能导致这种情况的原因是什么?我将服务设置为自动并安装它以便为所有用户运行。我的印象是,这意味着只要机器启动,服务就会自动启动。我如何找出它停止的原因?崩溃的服务会自动写入事件日志,还是我必须以他们记录崩溃原因的方式处理异常?
修改:其他一些信息:
更新:应答者推荐了一个全局异常处理程序。虽然我不会将其作为永久性修复来实现,但它至少可以帮助我找出问题发生的位置。我实际上用我安装的服务对它进行了测试,它确实有效我发现未处理的异常实际上会使服务崩溃而根本不向日志写任何内容。我认为它至少会报告一些应用程序错误,但它没有。
static void Main()
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
//other code here
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Utilities.WriteIt(e.ExceptionObject as Exception);
}
答案 0 :(得分:5)
处理异常总是最好的。至少使用全局异常处理程序并将其写入日志文件
答案 1 :(得分:3)
听起来您的服务在没有进行任何形式的异常处理和/或日志记录的情况下意外失败。 Windows服务不会自动将异常写入事件日志 - 由您来处理异常和(如果它们是致命的)将它们写出来以便您可以诊断问题。
至少,我建议在某个地方使用日志文件(可能在服务可执行文件夹中,或者最好在其他易于访问的地方,并且不会与许可问题发生冲突)和标准的日志记录方法异常处理程序调用将消息写入。
答案 2 :(得分:0)