2017-02-04 4 views
5

के लिए डॉटनेट कोर कैप्चर शटडाउन मैं .NET कोर पर पोर्ट कर रहा हूं और मौजूदा ऐप ने Win32 कॉल SetConsoleCtrlHandler को एप्लिकेशन को बंद करने के लिए हुक किया है ताकि यह खुली डेटाबेस फ़ाइलों और अन्य व्यवस्थित शट डाउन कार्यों को बंद कर सके।सुंदर बंद

मुझे .NET कोर में ऐसा करने की ज़रूरत है, और एकमात्र विकल्प जिसे मैं देख सकता हूं ISP.NET के साथ IAplicationLifetime ApplicationStopping.Register में हुक करके है। हालांकि, केवल Ctrl-C को कैप्चर करता है और यदि अंतिम उपयोगकर्ता या सिस्टम कंसोल ऐप (जैसे सिस्टम रीबूट) को समाप्त करता है तो Win32 कॉल करेगा।

दूसरा विकल्प ऐपडोमेन (AppDomain.CurrentDomain.ProcessExit) के माध्यम से है, हालांकि AppDomain डॉटनेट कोर में उपलब्ध नहीं है।

ऑर्डरली ऐप शट डाउन महत्वपूर्ण है और मैं उत्पादन प्रणाली में डेटा भ्रष्टाचार के बारे में चिंतित हूं इसलिए कुछ समकक्ष लागू करने की आवश्यकता है, और नया ऐप विंडोज और लिनक्स ओएस के मिश्रण पर चल रहा है।

क्या मुझे ऐसा करने के लिए डॉटनेट कोर में कोई फ़ंक्शन याद आया है? या क्या मुझे Win32 शट डाउन हुक को फिर से कार्यान्वित करना है और जो भी लिनक्स पर समतुल्य है?

+0

किसी के पास इस बारे में कोई विचार है कि इस पर सबसे अच्छा तरीका कैसे है? – deandob

उत्तर

2

AppDomain.CurrentDomain.ProcessExit घटना अब .NET कोर 2.0 में उपलब्ध है, और मैं पुष्टि कर सकता हूं कि यह लिनक्स पर ठीक काम करता है। .NET कोर 2.0 से पहले, AssemblyLoadContext.Default.Unloading शायद एक कामकाजी विकल्प है।

+1

हालांकि, ध्यान रखें कि यह विचार है, लेकिन कुछ मुद्दे हैं [https://github.com/dotnet/coreclr/issues/8565) - उस पर नजर रखने के लायक – quetzalcoatl