पंजीकृत नहीं किया गया COM एक्सेप्शन क्लास कैसे हल करें (HRESULT से अपवाद: 0x80040154 (REGDB_E_CLASSNOTREG))?


93

जब मैं एक COM वर्ग का एक उदाहरण बनाने की कोशिश करता हूं तो यह एक अपवाद के रूप में फेंकता है

कक्षा पंजीकृत नहीं है (HRESULT से अपवाद: 0x80040154 (REGDB_E_CLASSNOTREG))

कृपया सुझाव दें कि मैं इसे कैसे हल कर सकता हूं?


1
क्या आप कुछ कोड के साथ अधिक विवरण दे सकते हैं?
— Xaisoft

10
दो प्रश्न हैं: 1. क्या आप विंडोज 7 x64 मशीन पर COM घटक स्थापित / पंजीकृत करते हैं? 2. अपने आवेदन के लक्ष्य मंच के साथ, मुझे लगता है कि आपको x86 पर प्लेटफॉर्म सेट करना चाहिए, कृपया इसे "किसी भी सीपीयू" के रूप में सेट न करें? कृपया पहले COM को पंजीकृत करें और फिर आवेदन का परीक्षण करने के लिए दौड़ें। कृपया दस्तावेज़ को देखें: support.microsoft.com/kb/146219 और Regsvr32 के उपयोग और त्रुटि संदेशों की व्याख्या
— जैकवांग

मैंने इसे बिल्ड टारगेट को 'x86' में बदले बिना हल कर दिया। लिंक में समाधान: < stackoverflow.com/a/55513690/11310933 >
— सुनील Xtha

जवाबों:


49

ऐसा लगता है कि जो भी कार्यक्रम या प्रक्रिया आप शुरू करने की कोशिश कर रहे हैं, वह या तो आपके मशीन पर स्थापित नहीं है, एक क्षतिग्रस्त स्थापना है या पंजीकृत होने की आवश्यकता है।

या तो इसे स्थापित करें, इसे सुधारें (प्रोग्राम जोड़ें / निकालें के माध्यम से) या इसे पंजीकृत करें (Regsvr32.exe के माध्यम से)।

आपने हमें इससे अधिक मदद करने के लिए पर्याप्त जानकारी नहीं दी है।


4
सोचें कि आपका मतलब है RegSvr32.exe (RegSrv32.exe का विरोध करें)।
— खिड़कियाँ

60

आपको यह सुनिश्चित करने की आवश्यकता है कि आपकी सभी असेंबली सही आर्किटेक्चर के लिए संकलन कर रही हैं। COM घटक को पुनर्स्थापित नहीं करता है, तो x86 के लिए आर्किटेक्चर को बदलने का प्रयास करें।


इसने NAV 2009 R2 क्लाइंट (ClassID 50000004-0000-1000-0001-0000836BD2D2) को खोजने की मेरी प्रक्रिया को हल किया।
— विन्सेन्ट वैंकलबर्ग

14

मेरी समस्या और समाधान

मेरे पास 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' पर सेट कर रहा है।


कृपया कई प्रश्नों के समान उत्तर न दें। एक अच्छा उत्तर पोस्ट करें, फिर डुप्लिकेट के रूप में अन्य प्रश्नों को बंद करने के लिए वोट / ध्वज दें। यदि प्रश्न डुप्लिकेट नहीं है, तो प्रश्न के अपने उत्तरों को दर्जी करें ।
— क्लियोपेट्रा

10

यह भी ध्यान दें कि प्रारंभिक करते समय वर्ग संदर्भ उस अपवाद को बना सकता है। यदि आपके पास कोई ऑब्जेक्ट है जो INPROC_SERVER के रूप में कोडित है, लेकिन आप CLSCTX_LOCAL_SERVER के रूप में CoCreateInstance का प्रयास करें, तो आपको वह त्रुटि भी मिलेगी।

आपको यह सुनिश्चित करने की आवश्यकता है कि ऑब्जेक्ट पंजीकृत है और CoCreateInstance सही वर्ग के संदर्भ के साथ एक उदाहरण बना रहा है।


हां, यदि आप उदाहरण के लिए (इसके बजाय ) DesktopWallpaperका उपयोग करने का प्रयास करते हैं तो आपको त्रुटि मिलेगी । CLSCTX_INPROCCLSCTX_ALL0x80040154 (REGDB_E_CLASSNOTREG)
— user362515

9

यदि आप IIS पर एक वेब एप्लिकेशन में 64-बिट COM घटकों का उपयोग कर रहे हैं, तो सुनिश्चित करें कि एप्लिकेशन पूल 32 बिट एप्लिकेशन ( 32-बिट एप्लिकेशन सक्षम करें: उन्नत सेटिंग्स में गलत ) की अनुमति नहीं देने के लिए सेट है


5

मुझे यह एप्लिकेशन पूल उन्नत सेटिंग्स में 32 बिट अनुप्रयोगों को सक्षम करके काम करने के लिए मिला है। एप्लिकेशन पूल पर राइट क्लिक करें और उन्नत सेटिंग्स चुनें - 32 बिट अनुप्रयोगों को सक्षम करें। इससे वहां किसी को मदद मिल सकती है।


मेरे लिए भी ऐसा। एक 64 बिट देव मशीन, 64 बिट परीक्षण और 64 बिट लाइव सर्वर पर 32 बिट डीएल का उपयोग किया जाता है। देव बॉक्स पर ठीक काम किया। जब परीक्षण और लाइव सर्वर पर तैनात किया गया था, तो यह तब तक विफल रहा जब तक कि संबंधित IIS ऐप पूल में 32 बिट ऐप्स को अनुमति नहीं दी गई थी और पूल फिर से शुरू हो गए थे। मुझे "एंबेड इंटरॉप टाइप्स" (वीएस में आपत्तिजनक डीएल पर एक सेटिंग) को बंद करना पड़ा और "कॉपी लोकल" = सेट करना सही था, यह सुनिश्चित करने के लिए कि सर्वर में डीएल वास्तव में मूल रूप में कॉपी किया गया था।
— cymorg

3

कक्षा को पंजीकृत करके (विशेष रूप से इसका CLSID) - यहाँ उदाहरण देखें ।


क्या यह कुछ ऐसी वस्तु भी हो सकती है जिसे उसकी मशीन या सर्वर पर स्थापित करने की आवश्यकता है, जरूरी नहीं कि वह कक्षा का पंजीकरण हो।
— Xaisoft

@Xaisoft, "स्थापना" में आमतौर पर "पंजीकरण" शामिल होता है, जैसा कि MSDN url मैंने उल्लेख किया है।
— एलेक्स मार्टेली

3

मेरे मामले में

my platform x64 है

the Dll library(sdk) और यह redistributable package x64 है

इसलिए

  1. समाधान एक्सप्लोरर में navigate to your project

  2. खुला हुआ Properties

  3. change the Platform target from AnyCPU to x64

यहाँ छवि विवरण दर्ज करें


2

जिस तरह से मैंने इस मुद्दे को हल किया वह था रजिस्टर के COMजरिएregsvr32 ।

सुनिश्चित करें कि जिस COM को आप ला रहे हैं वह पंजीकृत है।

मेरा एप्लिकेशन उपयोग कर xceedcry.dllरहा था और मैं इसे पंजीकृत नहीं कर रहा था। एक बार जब मैंने इसे पंजीकृत किया, तो एप्लिकेशन ने ठीक काम किया।


2

मेरा समाधान IIS में सापेक्ष ऐप पूल की उन्नत सेटिंग्स में " 32-बिट एप्लिकेशन सक्षम करें " को सही में बदलना था ।

ऐप पूल

32 बिट अनुप्रयोगों को सक्षम करें


2

मेरे मामले में कक्षा ठीक से पंजीकृत थी और किसी भी सीपीयू / 64 बिट में निर्मित थी मोड ।

लेकिन अनुप्रयोग का IIS अनुप्रयोग पूल की 32-बिट अनुप्रयोग संपत्ति सक्षम करें जो वर्ग का उपयोग करता है वह True पर सेट किया गया था ।

अनुप्रयोग पूल कॉन्फ़िगरेशन और वास्तविक पंजीकृत वर्ग के बीच आर्किटेक्चर बेमेल के कारण वर्ग नहीं मिला।

स्थापना 32-बिट एप्लिकेशन सक्षम करने के लिए झूठी समस्या का समाधान हो। IIS ऐप पूल सेटिंग


1

मेरे लिए, मुझे 64 बिट बिल्ड कॉन्फ़िगरेशन बनाना था।


1

मैं MapWinGis का उपयोग कर एक ही मुद्दा था। मुझे इसका समाधान मिला, विजुअल स्टूडियो 2015 विन्डोज़ प्रोएक्ट पर काम करते हुए, प्रॉजेक्ट पर बस राइट क्लिक करें-> प्रॉपर्टीज़-> बिल्ड, ऑल कन्फिगरेशन के लिए कॉन्फ़िगरेशन सेट करें और कॉनबोक्स "प्लेटफ़ॉर्म टारगेट" में इसे x64 पर सेट करें।


0

मैं COM के माध्यम से C ++ क्लाइंट से .Net असेंबली को कॉल करते हुए इस समस्या में भाग गया। यह पता चला है कि .Net असेंबली की असेंबली में से एक पर निर्भर नहीं पाया जा सकता है। मैंने थोड़ी देर के लिए यह पता लगाने की कोशिश की कि पहली असेंबली में क्या गड़बड़ी थी, लेकिन यह वास्तव में 1 असेंबली की निर्भरताओं में से एक थी। C ++ क्लाइंट से CoCreateInstance () कॉल करते समय मुझे दो अलग-अलग त्रुटियां मिलीं। पहला था: REGDB_E_CLASSNOTREG वर्ग पंजीकृत नहीं था और दूसरा प्रयास था: 0x80131040: स्थित असेंबली की प्रकट परिभाषा विधानसभा संदर्भ से मेल नहीं खाती।

इसलिए जांचें कि आपके विधानसभा के संदर्भ मौजूद हैं। मैंने इसे पहली विधानसभा को dotPeek के साथ ब्राउज़ करके खोजा था और इसके संदर्भों में से एक को देखना गायब था। फ़ोल्डर में निर्भरता के सही संस्करण को रखकर दोनों त्रुटियों को हल किया।


0

मैं अपने आवेदन को किसी भी सीपीयू को लक्षित करने के लिए संकलित कर रहा था और मुख्य समस्या यह थी कि एडोब रीडर पुराने v10.x स्थापित किया गया था v11.x को अपग्रेड करने की आवश्यकता है , यह तरीका है कि मुझे इस मुद्दे को कैसे हल करना है।


0

मैं एक ही वर्ग में 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 एम्बेड इंटरॉप टाइप = सही (गुण विंडो में)


0

.Net ढांचे की निर्देशिका में जाएं और Regsvr32.exe व्हाइट स्पेस dll पथ के साथ संबंधित डीएल को पंजीकृत करें ।


0

मैंने उसी मुद्दे का सामना किया है। कुछ शोध के बाद मुझे मेरे लिए ठीक लगा और यह उपयोगी हो सकता है। मुद्दा केवल मेरे अवलोकन के रूप में पुनः स्थापना से संबंधित नहीं है, यह एक्सेस अनुमतियों पर भी निर्भर करता है।

चरण 1: विशेष COM ऑब्जेक्ट की मरम्मत करें।

चरण 2: घटक सेवाएँ> कंप्यूटर> मेरा कंप्यूटर> DCOM कॉन्फ़िगरेशन> अपनी COM ऑब्जेक्ट> राइट क्लिक> गुण> सुरक्षा टैब> एक्सेस अनुमतियाँ> कस्टमाइज़ चुनें> संपादित करें पर क्लिक करें> संपादित करें> IIS_USER (यदि पूर्ण अधिकार के साथ मौजूद नहीं है) का चयन करें और पूर्ण का चयन करें। एक्सेस करें और ओके पर क्लिक करें।

पहचान टैब पर जाएं> आप "इंटरएक्टिव उपयोगकर्ता" या "यह उपयोगकर्ता" का चयन कर सकते हैं> लागू करें और ठीक पर क्लिक करें। यदि आप "यह उपयोगकर्ता" चुनते हैं, तो हमें उस सर्वर पर प्रशासनिक विशेषाधिकार प्राप्त उपयोगकर्ता को देना होगा

चरण 3: IIS प्रबंधक खोलें> एप्लिकेशन पूल को पुनरारंभ करें।

नोट: यदि आवश्यक हो तो सर्वर को पुनरारंभ करें


-1

यहां हल खोजें, 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

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.