假设一个 Windows 服务崩溃,并且由于某些恢复选项而自动重新启动。我想在程序(C#)中运行一些代码,每当发生这种情况时,它会执行一些网络操作(发送一个它关闭的警报)。
是否有我可以应用的事件或我可以在此之后运行的代码?
谢谢!
假设一个 Windows 服务崩溃,并且由于某些恢复选项而自动重新启动。我想在程序(C#)中运行一些代码,每当发生这种情况时,它会执行一些网络操作(发送一个它关闭的警报)。
是否有我可以应用的事件或我可以在此之后运行的代码?
谢谢!
在这种情况下,我要做的不是在程序失败时写出一些东西,而是让程序将某种记录写出到持久存储中,然后如果它检测到干净的关闭正在完成,它会删除这些记录。
public partial class MyAppService : ServiceBase
{
protected override void OnStart(string[] args)
{
if(File.Exists(Path.Combine(Path.GetTempPath(), "MyAppIsRunning.doNotDelete"))
{
DoSomthingBecauseWeHadABadShutdown();
}
File.WriteAllText(Path.Combine(Path.GetTempPath(), "MyAppIsRunning.doNotDelete"), "");
RunRestOfCode();
}
protected override void OnStop()
{
File.Delete(Path.Combine(Path.GetTempPath(), "MyAppIsRunning.doNotDelete"));
}
//...
}
这可以很容易地用注册表项或数据库中的记录换出文件。
您可以订阅以下事件,无论异常发生在哪个线程中,该事件都会触发..
AppDomain.CurrentDomain.UnhandledException
示例实现
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
// log the exception ...
}