द्वारा पकड़ा नहीं गया पृष्ठभूमि पृष्ठभूमि में, मेरा आवेदन नियमित रूप से एप्लिकेशन अपडेट के लिए नेटवर्क फ़ोल्डर (यूएनसी पथ) की जांच करता है। यह फ़ाइल की विधानसभा संस्करण को पढ़ता है, इसलिए जैसे:SEHException कोशिश/कैच
Try
newVers = System.Reflection.AssemblyName.GetAssemblyName("\\server\app.exe").Version
Catch ex As Exception
' ignore
End Try
यह स्निपेट अक्सर निष्पादित किया जाता है, कुल में मैं अब तक एक समस्या के बिना एक से अधिक ग्राहक साइटों पर जिस तरह से 100,000 से अधिक बार लगता है कि चाहते हैं।
कभी-कभी, GetAssemblyName
FileNotFoundException
बढ़ाता है, उदाहरण के लिए यदि नेटवर्क फ़ोल्डर पहुंच योग्य नहीं है (जो हो सकता है और इसके साथ निपटा जाना चाहिए)। यह अपवाद Catch
ब्लॉक से नीचे पकड़ा गया है, और सब कुछ ठीक काम करता है।
तीन रिपोर्ट किए गए मामलों में, GetAssemblyName
कॉल ने SEHException
उठाया। अजीब बात यह है कि इस अपवाद को नीचे Catch
ब्लॉक द्वारा पकड़ा नहीं गया था, लेकिन मेरे वैश्विक अनचाहे अपवाद हैंडलर (System.AppDomain.CurrentDomain.UnhandledException
) द्वारा। नतीजतन, आवेदन दुर्घटनाग्रस्त हो जाता है।
यहाँ अपवाद विस्तार (दुर्भाग्य से, अपवाद के ErrorCode
और CanResume
क्षेत्रों मेरी त्रुटि दिनचर्या से निपटने से लॉग इन नहीं हैं) है:
Caught exception: System.Runtime.InteropServices.SEHException
Message: External component has thrown an exception.
Source: mscorlib
TargetSite: System.Reflection.AssemblyName nGetFileInformation(System.String)
StackTrace:
at System.Reflection.AssemblyName.nGetFileInformation(String s)
at System.Reflection.AssemblyName.GetAssemblyName(String assemblyFile)
at SyncThread.Run()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
क्यों है कि अपवाद Catch
ब्लॉक द्वारा पकड़ा नहीं है ठीक नीचे?
(हो सकता है कि यह प्रासंगिक है: यह केवल ग्राहक साइटों, जहां यूएनसी पथ एक सर्वर है कि स्थानीय नेटवर्क का हिस्सा नहीं था की ओर इशारा किया पर हुआ है, लेकिन एक वीपीएन पर एक दूरस्थ सर्वर।)
हमारे मामले में, हम टेलीरिक रैडग्रिड व्यू का उपयोग कर रहे हैं और एक पंक्ति जोड़ने के दौरान कभी-कभी इनमें से एक प्राप्त करते हैं। मेरे पास एक ही सवाल था कि यह क्यों पकड़ा नहीं जाएगा। एंड्रियास के सवाल के लिए धन्यवाद, और उत्तर @porges के लिए धन्यवाद। – ebol2000