जब मैं एक COM वर्ग का एक उदाहरण बनाने की कोशिश करता हूं तो यह एक अपवाद के रूप में फेंकता है
कक्षा पंजीकृत नहीं है (HRESULT से अपवाद: 0x80040154 (REGDB_E_CLASSNOTREG))
कृपया सुझाव दें कि मैं इसे कैसे हल कर सकता हूं?
जब मैं एक COM वर्ग का एक उदाहरण बनाने की कोशिश करता हूं तो यह एक अपवाद के रूप में फेंकता है
कक्षा पंजीकृत नहीं है (HRESULT से अपवाद: 0x80040154 (REGDB_E_CLASSNOTREG))
कृपया सुझाव दें कि मैं इसे कैसे हल कर सकता हूं?
जवाबों:
ऐसा लगता है कि जो भी कार्यक्रम या प्रक्रिया आप शुरू करने की कोशिश कर रहे हैं, वह या तो आपके मशीन पर स्थापित नहीं है, एक क्षतिग्रस्त स्थापना है या पंजीकृत होने की आवश्यकता है।
या तो इसे स्थापित करें, इसे सुधारें (प्रोग्राम जोड़ें / निकालें के माध्यम से) या इसे पंजीकृत करें (Regsvr32.exe के माध्यम से)।
आपने हमें इससे अधिक मदद करने के लिए पर्याप्त जानकारी नहीं दी है।
आपको यह सुनिश्चित करने की आवश्यकता है कि आपकी सभी असेंबली सही आर्किटेक्चर के लिए संकलन कर रही हैं। COM घटक को पुनर्स्थापित नहीं करता है, तो x86 के लिए आर्किटेक्चर को बदलने का प्रयास करें।
मेरी समस्या और समाधान
मेरे पास 32 बिट थर्ड पार्टी dll है जिसे मैंने 2008 R2 मशीन में स्थापित किया है जो 64 बिट है।
मेरे पास .net 4.5 ढांचे में बनाई गई एक wcf सेवा है जो प्रक्रिया के लिए 32 बिट थर्ड पार्टी dll को कॉल करती है। अब मैंने 'किसी' सीपीयू को लक्षित करने के लिए सेट संपत्ति बनाई है और इसे 64 बिट मशीन पर तैनात किया है।
जब मैंने wcf सेवा को लागू करने की कोशिश की तो त्रुटि मिली "80040154 वर्ग पंजीकृत नहीं (HRESULT से अपवाद: 0x80040154 (REGDB_E_CLASSNOTREG)"
अब मैंने कॉम रजिस्ट्री समस्या का पता लगाने के लिए ProcMon.exe का उपयोग किया और पहचाना कि प्रक्रिया HKLM \ CLSID और HKCR \ CLSID पर रजिस्ट्री प्रविष्टि की तलाश में है जहाँ कोई प्रविष्टि नहीं है।
यह जानने के लिए कि Microsoft 64 बिट मशीन में HKLM \ CLSID, HKCR \ CLSID के पथों में 32 बिट कॉम घटकों को पंजीकृत नहीं करेगा, बल्कि यह HKLM \ Wow6432Node \ CLSID और HKCR \ Wow6432Node \ CLSID पथों में प्रविष्टि रखता है।
अब संघर्ष 64 बिट प्रक्रिया 64 बिट मशीन में 32 बिट प्रक्रिया को लागू करने की कोशिश कर रहा है जो HKLM \ CLSID, HKCR \ CLSID में रजिस्ट्री प्रविष्टि के लिए दिखेगा। समाधान हमें 64 बिट प्रक्रिया को HKLM \ Wow6432Node \ CLSID और HKCR \ Wow6432Node \ CLSID पर रजिस्ट्री प्रविष्टि को देखने के लिए बाध्य करना है।
यह 'कोई' के बजाय 'X86' मशीन को लक्षित करने के लिए wcf सेवा परियोजना के गुणों को कॉन्फ़िगर करके प्राप्त किया जा सकता है।
2008 R2 सर्वर को 'X86' संस्करण को तैनात करने के बाद समस्या "System.BadImageFormatException: फ़ाइल या असेंबली लोड नहीं कर सका"
इस बैडिमेजफॉर्मटेक्स्टैप्शन का समाधान सही एपपूल के लिए IIS एपलप संपत्तियों में 'Enable32bitApplications' को 'True' पर सेट कर रहा है।
यह भी ध्यान दें कि प्रारंभिक करते समय वर्ग संदर्भ उस अपवाद को बना सकता है। यदि आपके पास कोई ऑब्जेक्ट है जो INPROC_SERVER के रूप में कोडित है, लेकिन आप CLSCTX_LOCAL_SERVER के रूप में CoCreateInstance का प्रयास करें, तो आपको वह त्रुटि भी मिलेगी।
आपको यह सुनिश्चित करने की आवश्यकता है कि ऑब्जेक्ट पंजीकृत है और CoCreateInstance सही वर्ग के संदर्भ के साथ एक उदाहरण बना रहा है।
DesktopWallpaperका उपयोग करने का प्रयास करते हैं तो आपको त्रुटि मिलेगी । CLSCTX_INPROCCLSCTX_ALL0x80040154 (REGDB_E_CLASSNOTREG)
मुझे यह एप्लिकेशन पूल उन्नत सेटिंग्स में 32 बिट अनुप्रयोगों को सक्षम करके काम करने के लिए मिला है। एप्लिकेशन पूल पर राइट क्लिक करें और उन्नत सेटिंग्स चुनें - 32 बिट अनुप्रयोगों को सक्षम करें। इससे वहां किसी को मदद मिल सकती है।
कक्षा को पंजीकृत करके (विशेष रूप से इसका CLSID) - यहाँ उदाहरण देखें ।
मेरे मामले में कक्षा ठीक से पंजीकृत थी और किसी भी सीपीयू / 64 बिट में निर्मित थी मोड ।
लेकिन अनुप्रयोग का IIS अनुप्रयोग पूल की 32-बिट अनुप्रयोग संपत्ति सक्षम करें जो वर्ग का उपयोग करता है वह True पर सेट किया गया था ।
अनुप्रयोग पूल कॉन्फ़िगरेशन और वास्तविक पंजीकृत वर्ग के बीच आर्किटेक्चर बेमेल के कारण वर्ग नहीं मिला।
स्थापना 32-बिट एप्लिकेशन सक्षम करने के लिए झूठी समस्या का समाधान हो।

मैं COM के माध्यम से C ++ क्लाइंट से .Net असेंबली को कॉल करते हुए इस समस्या में भाग गया। यह पता चला है कि .Net असेंबली की असेंबली में से एक पर निर्भर नहीं पाया जा सकता है। मैंने थोड़ी देर के लिए यह पता लगाने की कोशिश की कि पहली असेंबली में क्या गड़बड़ी थी, लेकिन यह वास्तव में 1 असेंबली की निर्भरताओं में से एक थी। C ++ क्लाइंट से CoCreateInstance () कॉल करते समय मुझे दो अलग-अलग त्रुटियां मिलीं। पहला था: REGDB_E_CLASSNOTREG वर्ग पंजीकृत नहीं था और दूसरा प्रयास था: 0x80131040: स्थित असेंबली की प्रकट परिभाषा विधानसभा संदर्भ से मेल नहीं खाती।
इसलिए जांचें कि आपके विधानसभा के संदर्भ मौजूद हैं। मैंने इसे पहली विधानसभा को dotPeek के साथ ब्राउज़ करके खोजा था और इसके संदर्भों में से एक को देखना गायब था। फ़ोल्डर में निर्भरता के सही संस्करण को रखकर दोनों त्रुटियों को हल किया।
मैं एक ही वर्ग में COM क्लास का उपयोग कर रहा था, यानी रनटाइम में 'क्लास पंजीकृत अपवाद नहीं'। मेरे लिए मैं app.config फ़ाइल पर जाकर हल करने में सक्षम था और 'स्टार्टअप' और 'supportRuntime' तत्वों को कुछ इस तरह से बदल दिया:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
आप यहाँ विवरण के बारे में अधिक पढ़ सकते हैं http://stackoverflow.com/questions/1604663/
और यहां https://msdn.microsoft.com/en-us/library/w4atty68(v=vs.110.in.xx
मुझे ध्यान देना चाहिए कि मैं विज़ुअल स्टूडियो 2017 चला रहा हूं। लक्ष्य cpu = x86 एम्बेड इंटरॉप टाइप = सही (गुण विंडो में)
.Net ढांचे की निर्देशिका में जाएं और Regsvr32.exe व्हाइट स्पेस dll पथ के साथ संबंधित डीएल को पंजीकृत करें ।
मैंने उसी मुद्दे का सामना किया है। कुछ शोध के बाद मुझे मेरे लिए ठीक लगा और यह उपयोगी हो सकता है। मुद्दा केवल मेरे अवलोकन के रूप में पुनः स्थापना से संबंधित नहीं है, यह एक्सेस अनुमतियों पर भी निर्भर करता है।
चरण 1: विशेष COM ऑब्जेक्ट की मरम्मत करें।
चरण 2: घटक सेवाएँ> कंप्यूटर> मेरा कंप्यूटर> DCOM कॉन्फ़िगरेशन> अपनी COM ऑब्जेक्ट> राइट क्लिक> गुण> सुरक्षा टैब> एक्सेस अनुमतियाँ> कस्टमाइज़ चुनें> संपादित करें पर क्लिक करें> संपादित करें> IIS_USER (यदि पूर्ण अधिकार के साथ मौजूद नहीं है) का चयन करें और पूर्ण का चयन करें। एक्सेस करें और ओके पर क्लिक करें।
पहचान टैब पर जाएं> आप "इंटरएक्टिव उपयोगकर्ता" या "यह उपयोगकर्ता" का चयन कर सकते हैं> लागू करें और ठीक पर क्लिक करें। यदि आप "यह उपयोगकर्ता" चुनते हैं, तो हमें उस सर्वर पर प्रशासनिक विशेषाधिकार प्राप्त उपयोगकर्ता को देना होगा
चरण 3: IIS प्रबंधक खोलें> एप्लिकेशन पूल को पुनरारंभ करें।
नोट: यदि आवश्यक हो तो सर्वर को पुनरारंभ करें
यहां हल खोजें, mmc -32 टूल चलाएं (dcomcfg नहीं)
32 बिट ऑफिस के साथ 64 बिट सिस्टम पर यह प्रयास करें:
Start
Run
mmc -32
File
Add Remove Snap-in
Component Services
Add
OK
Console Root
Component Services
Computers
My Computer
DCOM Config
Microsoft Excel Application
