我正在移植到 .NET 核心,现有应用程序已 Hook win32 调用 SetConsoleCtrlHandler 以捕获应用程序关闭,以便它可以干净地关闭打开的数据库文件和其他有序关闭任务。
我需要在 .NET 核心中做同样的事情,我能看到的唯一选择是通过挂接到 IApplicationLifetime ApplicationStopping.Register 来使用 ASP.NET。但是,这只会捕获 Ctrl-C,如果最终用户或系统终止了 win32 调用将要执行的控制台应用程序(例如系统重启),则它不起作用。
另一个选项是通过 AppDomain (AppDomain.CurrentDomain.ProcessExit),但是 AppDomain 在 dotnet Core 中不可用。
按顺序关闭应用程序很重要,我担心生产系统中的数据损坏,因此需要实现等效的东西,新应用程序将在 Windows 和 Linux 操作系统的混合环境中运行。
我是否错过了 dotnet 核心中的一个函数来执行此操作?或者我是否必须重新实现 win32 关闭 Hook 以及 Linux 上的任何等效项?
最佳答案
AppDomain.CurrentDomain.ProcessExit
事件现在在 .NET Core 2.0 中可用,我可以确认它在 Linux 上运行良好。在 .NET Core 2.0 之前,AssemblyLoadContext.Default.Unloading
可能是一个可行的替代方案。
关于c# - 捕获 .NET Core 中正常关闭的关闭命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42045384/