मैं एक बड़ी परियोजना पर काम कर रहा हूं, और इसकी संभावना पूरी तरह से पकड़ जाएगी। मुझे वह घटना मिली है जो मुझे अनचाहे अपवादों की सूचना देता है, हालांकि मुझे विंडोज़ त्रुटि संवाद को प्रोग्रामेटिक रूप से बंद करने का कोई तरीका नहीं मिला है। आदर्श रूप से, यदि कोई अनचाहे अपवाद है, तो मैं उस घटना को निकाल देना चाहता हूं, उपयोगकर्ता को यह बताते हुए एक संवाद बॉक्स प्रदान करता हूं कि कोई समस्या है, और फिर शानदार तरीके से बंद करें। क्या इसे करने का कोई तरीका है? मुझे एहसास है कि मैं कोशिश करने की कोशिश में उच्चतम परत लपेट सकता हूं, लेकिन मैं कुछ और अधिक सुरुचिपूर्ण चीज़ की उम्मीद कर रहा था।"माइक्रोसॉफ्ट को त्रुटि रिपोर्ट भेजें" रोकें
उत्तर
यह हमने किया है।
static void Main() {
try
{
SubMain();
}
catch (Exception e)
{
HandleUnhandledException(e);
}
}
private static void SubMain()
{
// Setup unhandled exception handlers
AppDomain.CurrentDomain.UnhandledException += // CLR
new UnhandledExceptionEventHandler(OnUnhandledException);
Application.ThreadException += // Windows Forms
new System.Threading.ThreadExceptionEventHandler(
OnGuiUnhandledException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
// CLR unhandled exception
private static void OnUnhandledException(Object sender,
UnhandledExceptionEventArgs e)
{
HandleUnhandledException(e.ExceptionObject);
}
// Windows Forms unhandled exception
private static void OnGuiUnhandledException(Object sender,
System.Threading.ThreadExceptionEventArgs e)
{
HandleUnhandledException(e.Exception);
}
http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx
हालांकि यदि आप एक वाणिज्यिक परियोजना के रूप में इस जारी कर रहे हैं, मैं, माइक्रोसॉफ्ट के साथ रजिस्टर करने के लिए इतना है कि आप वास्तव में दुर्घटना डंप और त्रुटि की रिपोर्ट करने की जानकारी है कि करने के लिए भेजा जा रहा है प्राप्त कर सकते हैं के लिए प्रोत्साहित करते एमएस
आपने अपना खुद का प्रश्न उत्तर दिया। त्रुटि संवाद को रोकने का सबसे अच्छा तरीका कोड लिखना है जो आपके अपवादों को संभालता है ताकि संवाद कभी प्रकट न हो। मैं दांव दूंगा कि रेमंड चेन सुझाव देगा (अगर मैं इतना बोल्ड हो सकता हूं)।
एक वैश्विक प्रयास/पकड़ (पहला जवाब की तरह) मैं विचार कर रहा था। मुझे यकीन नहीं था कि यह सबसे अच्छा अभ्यास था या नहीं। मुझे यह भी यकीन नहीं था कि ऐसा करने के लिए एक क्लीनर तरीका है या नहीं। – Steve
आप HKEY_LOCAL_MACHINE \ सॉफ्टवेयर \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug
के साथ खेल यही कारण है कि टिप रूप DrWatson दिनों .. या काम नहीं हो सकता है है की कोशिश कर सकते हैं।
यदि आप किसी ऐप-विशिष्ट समस्या को हल करने का प्रयास कर रहे हैं, तो सिस्टम-व्यापी सेटिंग्स के साथ मक न करें –
- उपयोगकर्ता इस तथ्य को पसंद नहीं कर सकते कि आप उनकी सेटिंग्स बदलते हैं ... - आपके एप्लिकेशन में इस रजिस्ट्री में लेखन पहुंच नहीं हो सकती है कुंजी। –
यदि आपका प्रश्न WinForms एप्लिकेशन के संबंध में था तो चयनित उत्तर आपके लिए काम करेगा, हालांकि यह बिल्कुल सुरुचिपूर्ण नहीं है।
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf CurrentDomain_UnhandledException
आप या .NET फ्रेमवर्क 2.0 का उपयोग कर रहे बाद में और वहाँ एक कार्यकर्ता धागे से एक बिना क्रिया अपवाद नहीं है, तो मैं आपको belive:
नेट इस सटीक परिदृश्य के लिए एक सहायक प्रदान करता है भाग्य से बाहर हो गया। .NET 1.0 और 1.1 में, सीएलआर ने मुख्य थ्रेड के अलावा किसी थ्रेड से अपवाद को निगल लिया। हालांकि, यह .NET 2.0 में बदला गया था जहां थ्रेड पर एक अनचाहे अपवाद एप्लिकेशन को बंद करने का कारण बनता है।
आप इस तरह के अनचाहे अपवाद होने पर अधिसूचित होने के लिए AppDomain.CurrentDomain.UnhandledException की सदस्यता ले सकते हैं लेकिन आवेदन इस बिंदु पर बंद होने की संभावना है और आपको लॉगिंग की तरह अपरिहार्य से पहले चीजों को करने का मौका दिया गया है कुछ जगह अपवाद और उपयोगकर्ता के अनुकूल संदेश प्रदर्शित करना। UnhandledExceptionEventArgs में एक पाठक संपत्ति है जिसे IsTerminating कहा जाता है जिसे आप देख सकते हैं कि एप्लिकेशन समाप्त हो रहा है या नहीं। एप्लिकेशन समाप्त होने के बाद, आमतौर पर माइक्रोसॉफ्ट त्रुटि रिपोर्टिंग संवाद पॉप अप हो जाता है।
जबकि मैं इसकी अनुशंसा नहीं करता हूं, एपी कॉन्फ़िगरेशन फ़ाइल में एप्लिकेशन संगतता ध्वज सेट करके सीएलआर 1.0 और 1.1 कैसे व्यवहार कर रहे थे, इस पर वापस जाने का एक तरीका है।
यह आवेदन बिना क्रिया अपवाद के मामलों में समाप्त कर देंगे और है कि त्रुटि रिपोर्ट संवाद हो रही की संभावना को कम करने के लिए कारण नहीं होना चाहिए।
मेरी सिफारिश केवल उन अपवादों को पकड़ना होगा जिन्हें आप उम्मीद करते हैं और अपने कोड में संभाल सकते हैं और अन्य लोगों को बुलबुला कर सकते हैं।
यह इस बात पर निर्भर करता है कि आप अपने कार्यकर्ता धागे को कैसे प्रबंधित करते हैं। सभी गैर-लंबे समय तक चलने वाली नौकरियों के लिए मेरा पसंदीदा दृष्टिकोण Aslegc कार्रवाई करने के लिए थ्रेडपूल थ्रेड का उपयोग करने के लिए Delegate.BeginInvoke() का उपयोग करना है। यदि आप ऐसा करते हैं तो जब आप EndInvoke() को कॉल करते हैं तो थ्रेड किसी भी अपवाद को वापस कर देगा - आपको बस यह सुनिश्चित करना होगा कि EndInvoke को प्रत्येक BeginInvoke के लिए बुलाया जाता है (ऐसा नहीं करने से संसाधनों की रिसाव हो सकती है)। – STW
- 1. माइक्रोसॉफ्ट रिपोर्ट
- 2. माइक्रोसॉफ्ट एएसपी.NET रिपोर्ट व्यूअर पार्सर त्रुटि
- 3. एंड्रॉइड - क्रैश रिपोर्ट कैसे भेजें?
- 4. माइक्रोसॉफ्ट विजुअल सी ++ रनटाइम त्रुटि
- 5. System.ComponentModel.AsyncOperation.VerifyNot बाज़ार त्रुटि रिपोर्ट में त्रुटि त्रुटि
- 6. .NET "त्रुटि रिपोर्ट [मुझे]"
- 7. समूह में डुप्लिकेट मानों को रोकें, SSRS रिपोर्ट
- 8. एसएसआरएस रिपोर्ट में ऑटोरेसाइजिंग बॉडी को कैसे रोकें
- 9. बल रोकें या त्रुटि पर रोकें
- 10. "इस स्क्रिप्ट को चलाने से रोकें?" त्रुटि
- 11. एसएसआरएस रिपोर्ट सदस्यता एक त्रुटि
- 12. 500 त्रुटि पृष्ठ को कॉल करने के लिए 500 .net त्रुटि को कैसे रोकें
- 13. माइक्रोसॉफ्ट एक्सेस 2007 - रिपोर्ट में इस्तेमाल क्वेरी देखें?
- 14. माइक्रोसॉफ्ट रिपोर्ट व्यूअर वेब कंट्रोल स्क्रिप्ट मैनेजर की आवश्यकता है
- 15. माइक्रोसॉफ्ट रिपोर्ट के लिए एक ट्यूटोरियल WinForm आवेदन में
- 16. माइक्रोसॉफ्ट रिपोर्ट व्यूअर: सत्र की अवधि समाप्त हो गई त्रुटियां
- 17. क्रिस्टल रिपोर्ट बनाम माइक्रोसॉफ्ट एसक्यूएल सर्वर रिपोर्टिंग सेवाएं
- 18. एक इंटरसेप्टर से प्रतिक्रिया कैसे भेजें, और आगे निष्पादन रोकें?
- 19. एसक्यूएल रिपोर्टिंग सर्वर को अपहरण/रिपोर्ट
- 20. माइक्रोसॉफ्ट वर्ड
- 21. माइक्रोसॉफ्ट जेस्क्रिप्ट रनटाइम त्रुटि: फंक्शन अपेक्षित
- 22. रिपोर्ट को हटाएं Google मानचित्र से मानचित्र त्रुटि
- 23. एसक्यूएल सर्वर - रिपोर्ट त्रुटि वापस .NET
- 24. क्रिस्टल रिपोर्ट अजीब त्रुटि (अज्ञात क्वेरी इंजन त्रुटि)
- 25. रिपोर्ट पैरामीटर (मल्टी-वैल्यू) रिपोर्ट
- 26. वीएस रिपोर्ट व्यूअर आरडीएलसी - किसी तालिका को अन्य वस्तुओं को धक्का देने से कैसे रोकें?
- 27. माइक्रोसॉफ्ट को बदलना। VisualBasic.CompilerServices.DesignerGenerated()
- 28. मैं अपने रूपों में माइक्रोसॉफ्ट एसक्यूएल सर्वर 2008 रिपोर्ट बिल्डर को कैसे एम्बेड कर सकता हूं?
- 29. माइक्रोसॉफ्ट चार्ट कंट्रोल: सीरीज को लीजेंड
- 30. प्रोग्रामेटिक रूप से vim को कमांड भेजें
मुझे डाउनवॉट क्यों किया गया? –
आप AppDomain.UnhandledException * को क्यों कार्यान्वित करते हैं और * पूरी चीज़ को Try/Catch ब्लॉक में लपेटें? वह बेवकूफ हंस है। –