2009-11-05 17 views
23

क्या विंडोज सेवा के लिए वैश्विक रूप से अपवादों को संभालने का कोई तरीका है? Windows में निम्न जैसा कुछ अनुप्रयोगों फॉर्म्स:विंडोज सेवाओं के लिए वैश्विक अपवाद हैंडलर?

Application.ThreadException += new ThreadExceptionEventHandler(new ThreadExceptionHandler().ApplicationThreadException); 
+2

विंडोज सेवाओं के लिए सबसे प्रासंगिक उत्तर यहां पाया जा सकता है: http://stackoverflow.com/a/5117790/986720 यह बताता है कि अपवाद को AppDomainUnhandledException हैंडलर –

उत्तर

20

यहां कुछ सुंदर मजबूत कोड है जो हम लोगों को उनके विंडोज अनुप्रयोगों में http://exceptioneer.com लागू करने पर सलाह देते हैं।

namespace YourNamespace 
{ 
    static class Program 
    { 

     [STAThread] 
     static void Main() 
     { 
      AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 
      Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException); 
      Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
     } 

     static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) 
     { 
      HandleException(e.Exception); 
     } 

     static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
     { 
      HandleException((Exception)e.ExceptionObject); 
     } 

     static void HandleException(Exception e) 
     { 
      //Handle your Exception here 
     } 

    } 
} 

धन्यवाद,

फिल।

+0

विंडोज सेवाओं के संबंध में "एप्लिकेशन" कहां है? – ferventcoder

+0

क्या आपको अपनी टिप्पणी के लिए उत्तर मिला? "एप्लिकेशन" कहां है – HaBo

+3

'एप्लिकेशन' (https://msdn.microsoft.com/en-us/library/system.windows.forms.application(v=vs.110).aspx) और उपरोक्त कोड में से अधिकांश है WinForms के लिए विशिष्ट और विंडोज सेवाओं के लिए प्रासंगिक नहीं है। 'AppDomain.CurrentDomain.UnhandledException' सेवाओं के लिए महत्वपूर्ण है। अपवाद हैंडलिंग चर्चा के लिए http://stackoverflow.com/questions/2456819/how-can-i-set-up-net-unhandledexception-handling-in-a- विन्डोज़- सेवा भी देखें। – Rory

20

आप की कोशिश की

AppDomain.CurrentDomain.UnhandledException 

यह कोई बात नहीं क्या धागा वे पर होने दिये गये डोमेन बिना क्रिया अपवाद के लिए सक्रिय कर देगा है। यदि आपकी विंडोज सेवा एकाधिक ऐपडोमेन का उपयोग करती है तो आपको प्रत्येक डोमेन के लिए इस मान का उपयोग करने की आवश्यकता होगी लेकिन अधिकांश नहीं।

+1

द्वारा क्यों पकड़ा नहीं गया है यदि आपकी सेवा 'System.Timers का उपयोग कर चलती है टिमर टाइमर और 'विलुप्त' घटना में आवधिक कार्य करता है, फिर उस घटना में उठाए गए अपरिवर्तित अपवादों को 'AppDomain.CurrentDomain.UnhandledException' ईवेंट' द्वारा नहीं देखा जाएगा। टाइमर बस उन्हें निगलता है और अपवाद के साथ कुछ भी नहीं करता है। –

+1

मुझे पता है कि यह एक पुराना धागा है। क्या यह सिस्टम पर लागू होता है। थ्रेडिंग। टाइमर? –

संबंधित मुद्दे