2008-10-07 25 views
29

मेरे पास एक प्रोग्राम है जो अंतर्निहित वेबब्रोसर नियंत्रण का उपयोग करता है।सी # वेबब्रोसर नियंत्रण प्रणाली .AccessViolationException

System.AccessViolationException 

FullText = System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. 
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) 
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
at System.Windows.Forms.Application.Run(Form mainForm) 

किसी को भी कारण है कि मैं इस मिलेगा के बारे में कोई सुराग है: इस के उपयोग के दौरान कुछ बिंदु पर, मैं क्या बिंदु पर यकीन नहीं है, लेकिन यह यादृच्छिक प्रतीत होता है, मैं निम्नलिखित त्रुटि मिलती है और इसे कैसे रोकें?

+0

यदि किसी को भी इसके लिए लगातार समाधान मिल जाए तो मुझे बताएं और मैं इसे स्वीकार करूंगा। ब्राउजर नियंत्रण के विरोध में ब्राउज़र के बाहर ब्राउज़र खोलकर मैं इसके चारों ओर मिल गया। –

+2

क्या किसी और के प्रश्न पर स्वामित्व देने का कोई तरीका है? मैं इस प्रणाली पर कोई लंबा काम नहीं करता, और इसलिए यहां कोई जवाब स्वीकार नहीं करेगा ... –

उत्तर

3

मेरी आंत महसूस यह है कि आप दस्तावेज़ में हेरफेर करने से पहले दस्तावेज़ में हेरफेर करने की कोशिश कर रहे हैं। दस्तावेज़ टेक्स्ट या एचटीएमएल को बदलने से पहले "लगभग: रिक्त" पर नेविगेट करने का प्रयास करें।

यदि आप पहले से ही नेविगेशन कर रहे हैं, तो ध्यान दें कि नेविगेशन असीमित है, इसलिए आपको नेविगेशन पूर्ण होने पर पता लगाने के लिए ब्राउज़र की घटनाओं की निगरानी करने की आवश्यकता है। अन्यथा, आप मौजूद होने से पहले दस्तावेज़ को लिखने का प्रयास कर सकते हैं।

+1

मैं दस्तावेज़ में नहीं लिख रहा हूं। मैं बस वेबब्रोसर के लिए एक यूआरएल गुजर रहा हूँ। मेरे पास एक पीठ और ताज़ा बटन भी है। मैं किसी भी समय दस्तावेज़ में पाठ या एचटीएमएल में हेरफेर नहीं कर रहा हूं। –

1

हम इसे भी मार रहे हैं। असंगत रूप से, हमें यह अपवाद मिलेगा।

कुछ प्रश्न इसे कम करने में मदद करने के लिए: क्या आप सीधे किसी भी mshtml इंटरफेस का उपयोग कर रहे हैं (उदा। Mshtml.dll)? सीधे किसी भी COM इंटरऑप करना?

हमने पाया है कि कुछ COM MSHTML इंटरफ़ेस को गलत तरीके से कॉल करने से इसका कारण बन सकता है।

हमने यह भी पाया है कि COM marshalling को गलत तरीके से करने से इसका कारण बन सकता है।

यदि एमएसएचटीएम इंटरफ़ेस आयात में कोई बग है तो अंतर्निहित वेबब्रोसर का उपयोग करता है, तो यह इसका कारण बन सकता है।

किसी अन्य डोमेन से दस्तावेज़ IFRAME तत्वों तक पहुंचने से इसका कारण बन सकता है।

यह संभव है कि जब दस्तावेज़ तैयार न हो तो WebBrowser कॉल करना भी इसका कारण बन सकता है।

0

बस एक सुझाव है, मैं इस पर कोई विशेषज्ञ नहीं हूं लेकिन पिछले अनुप्रयोगों में वेबब्रोसर का बहुत उपयोग किया है, लेकिन आप ब्राउज़र को कुछ भी पास करने का प्रयास करने से पहले 1 सेकंड प्रतीक्षा करने के लिए फ़ंक्शन क्यों नहीं लिखते हैं और हमेशा पहले से तैयार की जांच करते हैं भी। थोड़ा धीमा हो सकता है लेकिन इसे बुलेट प्रूफ बनाना चाहिए। :)

+0

मैं इसे आज़माउंगा और देख सकता हूं कि यह काम करता है या नहीं। –

0

क्या वे पृष्ठ हैं जिन्हें आप किसी ActiveX नियंत्रणों को होस्ट करने के लिए नेविगेट कर रहे हैं? यदि हां, उनमें से एक दोषपूर्ण हो सकता है। आईई में अपने पेज भी देखें। देखें कि वे एक ही तरह से दुर्घटनाग्रस्त हैं या नहीं। यह अलग-अलग मदद करेगा अगर यह सामग्री या ब्राउज़र नियंत्रण के लिए विशिष्ट है।

0

मैंने ब्राउज़र में बस वेबपृष्ठ खोलना समाप्त कर दिया। इस तरह मुझे इसके बारे में भी चिंता करने की ज़रूरत नहीं है। यह अभी भी अजीब है कि यह इस त्रुटि को फेंकता है हालांकि।

+0

मैंने मूल रूप से इसे स्वीकार कर लिया है, लेकिन कुछ लोग इसे उत्तर के रूप में उपयोग करने में सक्षम नहीं हो सकते हैं, इसलिए जब तक अन्य लोगों के पास समस्याएं हैं, तब तक मैं इस प्रश्न को अनुत्तरित छोड़ने जा रहा हूं। –

0

यह एक विस्टा इश्यू लगता है, मुझे क्या खुशी हुई कि मेरा सी # वेब ब्रोसर 1 एक ऐसे वेब पेज का चयन करता है जिसने जावा ऐपलेट चलाया जो एक बाहरी आईई वेबपृष्ठ का चयन करता है जो ActiveX एप/स्क्रिप्ट चलाता है।

जब ActiveX स्क्रिप्ट सी # ऐप की याद में वापस अपडेट करने का प्रयास करती है तो Vista में डीईपी "डेटा निष्पादन रोकथाम" इस ऑपरेशन को शत्रुतापूर्ण/वायरस के रूप में ध्वजांकित करता है और सिस्टम के साथ प्रोग्राम समाप्त करता है। एक्सेस अपहरण अपवाद: पढ़ने का प्रयास किया गया है या संरक्षित स्मृति लिखें। यह अक्सर एक संकेत है कि अन्य स्मृति भ्रष्ट है।"

इस के लिए मेरे ठीक cmd

"bcdedit.exe /set {current} nx AlwaysOff" 

में इस लाइन के साथ Vista में डीईपी की बारी और मशीन को रिबूट करने के लिए किया गया था।

XP भी डीईपी चलाने तो कुछ मामलों में मैं लगता है कि ऐसा ठंड यहाँ भी। अगर इसकी एक डीईपी मुद्दा ऐसा करने के परीक्षण करने के लिए।

सही पर "मेरा कंप्यूटर" चुनें "गुण" और "उन्नत" "के अंतर्गत स्टार्टअप और वसूली क्लिक करें, सेटिंग्स अब "संपादित करें" पर क्लिक करें नोटपैड अभी शुरू हो गया है। बस लाइन को प्रतिस्थापित करें: कोड: AlwaysOff द्वारा कोई निष्पादन विकल्प लेनदेन को पूरा करने के लिए अपने पीसी को पुनरारंभ करें।

आप डीईपी पुन: सक्रिय करने इस तरह रिवर्स संचालन करने के लिए, पर्याप्त होना चाहते हैं:

उद्धरण से बदलें: AlwaysOff noexecute = noexecute = optin

+0

यह एक्सपी मशीनों पर भी हो रहा था। –

+0

एक्सपी भी डीईपी चलाता है इसलिए मैं डीईपी को चालू करने की कोशिश करता हूं, यह देखने के लिए कि यह मुद्दा है या नहीं। – Darkmage

+1

मेरे ग्राहकों के बारे में कैसे? मैं उन सभी को डीईपी अक्षम करने के लिए नहीं कह सकता ... –

5

हमने हाल ही में की मशीनों पर समान समस्या पड़ा है कई ग्राहक समस्या कुछ वातावरण में एमएसएचटीएम नियंत्रण में एक बग साबित हुई। समस्या के लिए एक आम लक्षण jscript.dll लाइब्रेरी का पंजीकरण तोड़ दिया प्रतीत होता है।

लक्षण जो यह समस्या का निदान करने में मदद कर सकते हैं यदि यह एक ही समस्या है - jscript.dll डीबगर में मॉड्यूल में सूचीबद्ध नहीं है और प्रक्रिया द्वारा लोड नहीं किया गया है;

mshtml!CRootTracker::CollectGarbageInternal+0xd 
mshtml!CDoc::ReduceMemoryPressureTask+0x29 
mshtml!CStackPtrAry<unsigned long,12>::GetStackSize+0xb6 
mshtml!GlobalWndProc+0x183 
USER32!InternalCallWinProc+0x23 
USER32!UserCallWinProcCheckWow+0x109 
USER32!DispatchMessageWorker+0x3bc 
USER32!DispatchMessageW+0xf 

समाधान jscript.dll पुस्तकालय पुन: पंजीकृत करने के लिए है और दुर्घटना दूर जाना चाहिए: दुर्घटना के लिए मूल निवासी स्टैक ट्रेस निम्नलिखित है।

पुन: पंजीयन पुस्तकालय के रूप में निम्नानुसार किया जाता है (के लिए 64-बिट Windows दिए गए उदाहरण, अन्यथा केवल पहली पंक्ति के लिए आवश्यक है):

C:\Windows\System32\regsvr32.exe C:\Windows\System32\jscript.dll 
C:\Windows\SysWOW64\regsvr32.exe C:\Windows\SysWOW64\jscript.dll 

दोनों कमांड "प्रशासक के रूप में रन" रहना होगा।

3

वेबब्रोसर तक पहुंचने का प्रयास करते समय मुझे कई अवसरों पर इस अपवाद का सामना करना पड़ा। रीडस्टेट और वेब ब्रोसर। दस्तावेज़।

मुझे विशेष रूप से विंडोज एक्सपी 32 बिट पर अपवाद थे। अन्य समाधानों की मदद नहीं करने के बाद, यह एक थ्रेडिंग मुद्दा प्रतीत होता है। मैंने किसी भी कोड ब्लॉक को घेर लिया जिसने म्यूटेक्स ताले के साथ वेब ब्राउज़र नियंत्रण का उपयोग किया, और यह समस्या को हल करने लग रहा था।

+2

डीबगिंग के 10 घंटों के बाद और यह खोजने से मुझे मदद मिली। धन्यवाद! वैसे, मुझे विंडोज 7 में अपवाद मिल रहे थे। – Martynas

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