如果 Windows 服务在崩溃后必须重新启动,如何使它运行一些代码

本文关键字:何使它 运行 代码 重新启动 服务 Windows 崩溃 如果 | 更新日期: 2023-09-27 18:35:54

假设Windows服务崩溃,并且由于某些恢复选项而自动重新启动。我想在程序 (C#) 中运行一些代码,每当发生这种情况时,这些代码都会执行一些网络操作(发送它关闭的警报)。

发生

后,是否有我可以应用的事件或我可以运行的代码?

谢谢!

如果 Windows 服务在崩溃后必须重新启动,如何使它运行一些代码

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

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 ...
}