2017-02-04 5 views
5

私は.NETコアに移植しています。既存のアプリケーションは、開いているデータベースファイルやその他の正常なシャットダウンタスクをきれいに閉じることができるように、アプリケーションを閉じるためにWin32呼び出しSetConsoleCtrlHandlerをフックしています。graceful closeのためのdotnetコアキャプチャシャットダウン

私は.NETコアで同じことをする必要があります。唯一のオプションは、ASP.NETでIApplicationLifetime ApplicationStopping.Registerにフックすることです。しかし、これはCtrl-Cのみをキャプチャし、エンドユーザまたはシステムがWin32呼び出しが行うコンソールアプリケーション(たとえば、システムの再起動)を終了した場合には機能しません。

他のオプションはAppDomain(AppDomain.CurrentDomain.ProcessExit)経由ですが、AppDomainはdotnet Coreでは使用できません。

正常にアプリのシャットダウンが重要で、私は本番システムのデータ破損が心配だから、同等のものを実装する必要があり、新しいアプリはWindowsとLinux OSの両方で実行されます。

これを行うにはdotnetコアの機能が欠けていますか?あるいは、私はwin32のシャットダウンフックを再実装しなければならないのですか?

+0

これに最も近づける方法はありますか? – deandob

答えて

2

.NETコア2.0でAppDomain.CurrentDomain.ProcessExitイベントが利用できるようになりました。これはLinux上で正常に動作することを確認できます。 .NET Core 2.0より前のバージョンでは、おそらくはAssemblyLoadContext.Default.Unloadingが有効です。

+1

しかし、それはアイデアであることに留意してください。しかし、そこには注意が必要な[いくつかの問題](https://github.com/dotnet/coreclr/issues/8565)もあります。 – quetzalcoatl

関連する問題