如果 windows 服务 运行 在崩溃后必须重新启动,我该如何制作一些代码?

How can I make a windows service run some code if it had to restart after a crash?

假设 windows 服务崩溃,并由于一些恢复选项而自动重启。我想 运行 程序 (C#) 中的一些代码,只要发生这种情况,它们就会执行一些网络操作(发送关闭警报)。

是否有我可以申请的事件或我可以在该事件发生后获得 运行 的代码?

谢谢!

您可以订阅以下事件,无论在哪个线程中发生异常,该事件都会触发..

AppDomain.CurrentDomain.UnhandledException

实施示例

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
 // log the exception ...
}

在这种情况下,我会做的不是在程序失败时写出一些东西,而是让程序将某种记录写到持久存储中,如果它检测到正在干净关闭,它就会删除这些记录完成。

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"));
    }

    //...
}

这很容易将文件替换为注册表项或数据库中的记录。