我对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);
}