让我们说Windows服务崩溃,并由于某些恢复选项而自动重启。我想在程序(C#)中运行一些代码,这些代码会发生一些网络动作(发送它关闭的警报)。
是否有我可以应用的事件或我可以在发生后运行的代码?
谢谢!
答案 0 :(得分:3)
在这种情况下,我要做的不是在程序失败时写出一些内容,而是让程序将某种记录写入持久存储,然后如果检测到正在执行干净关闭则删除。
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"));
}
//...
}
这可能很容易将文件与注册表项或数据库中的记录交换出来。
答案 1 :(得分:2)
您可以订阅以下事件,无论发生异常的哪个线程都会触发该事件。
AppDomain.CurrentDomain.UnhandledException
示例实施
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
// log the exception ...
}