c# - 捕获 .NET Core 中正常关闭的关闭命令

标签 c# linux windows asp.net-core .net-core

我正在移植到 .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/

相关文章:

c# - 我可以从 null 中分辨出未定义的 Action 参数吗?

PHP exec 没有按预期运行我的脚本

python - "is"报告子进程通信错误()

windows - Octave-如何在启动时自动执行命令

c# - 在 PC 中使用网络摄像头作为环境光传感器

C#-Magento : filter products by category_ids

c# - 代码不介入具体方法

C# 是否可以自定义/覆盖保留其类名的类?

linux - 自动检测并写入 U 盘/拇指驱动器

node.js - 构建脚本在 Windows 上失败,但在 Linux 或 OSX 上不会