निम्नलिखित त्रुटि के कारण CLSID {XXXX} घटक के लिए COM वर्ग के कारखाने को पुनः प्राप्त करना विफल रहा: 80040154


278

मैंने पीडीएफ रिपोर्ट जनरेट करने के लिए C # .NET का उपयोग कर एक विंडोज सेवा विकसित की। पीडीएफ फाइल जेनरेट करने के लिए मैं थर्ड पार्टी dll का उपयोग कर रहा हूं। एप्लिकेशन मेरे Windows XP प्लेटफ़ॉर्म में चल रहा है। जब मैंने Windows Server 2008 64 बिट संस्करण में सेवा को तैनात किया , तो मुझे यह त्रुटि मिली:

CLSID {46521B1F-0A5B-4871-A4C2-FD5C9276F4C6} घटक के साथ COM वर्ग के कारखाने को पुनः प्राप्त करना निम्न त्रुटि के कारण विफल रहा: 80040154।

मैंने regsvr32 कमांड का उपयोग कर DLL को पंजीकृत किया। मैं इस सीएलएसआईडी को रजिस्ट्री में देख पा रहा हूं। लेकिन समस्या बनी रहती है।

क्या समस्या हो सकती है?


1
एक ही सर्वर में होस्ट किया गया वेब एप्लिकेशन पीडीएफ फाइल को बिना किसी त्रुटि के उत्पन्न करने में सक्षम है।
गोपाल

दोस्तों मैंने हर संभव समाधान की कोशिश की लेकिन फिर भी यह त्रुटि हो रही है। मैंने असेंबली की है और उन्हें सफलतापूर्वक पंजीकृत किया है लेकिन अभी भी वही त्रुटि हो रही है। वाकई मदद की जरूरत है ...
newprogress

जवाबों:


383

वीएस में - प्रोजेक्ट गुण - बिल्ड टैब में - प्लेटफ़ॉर्म लक्ष्य = X86


7
VS2008 में मुझे यह विकल्प 'कंपाइल-> एडवांस कम्पाइल ऑप्शन्स ...' (विंडो टैब के निचले भाग में) और फिर 'टारगेट सीपीयू' (x86)
रोडोल्फो

1
आप लायक एक से अधिक +1 लेकिन +1 सब मैं देना है है
डेविड

7
यह हमेशा समाधान नहीं है।

2
आपने मुझे सात अपतटीय बैंक खातों, एक हॉट डॉग स्टैंड और मेरी शादी को बचाया है। धन्यवाद
Donald.Record

2
मेरे पास एक ही त्रुटि संदेश है लेकिन यह समाधान मेरे लिए काम नहीं करता है।
अकरम खान

59

मैं एक समान मुद्दे में भाग गया।

मुझे एक वेब अनुप्रयोग के भीतर एक पुराने 32-बिट DLL का उपयोग करने की आवश्यकता थी जो 64-बिट मशीन पर विकसित की जा रही थी। मैंने 32-बिट DLL को उस फ़ोल्डर में regsrv32 के संस्करण का उपयोग करके windows \ sysWOW64 फ़ोल्डर में पंजीकृत किया।

थर्ड पार्टी डीएलएल को कॉल ने विज़ुअल स्टूडियो में यूनिट टेस्ट से काम किया लेकिन 80040154 त्रुटि के साथ उसी मशीन पर IIS में होस्ट किए गए वेब एप्लिकेशन से विफल रहा।

"32-बिट एप्लिकेशन को सक्षम करें" एप्लिकेशन पूल को बदलने से समस्या हल हो गई।


1
यह सबसे आसान तरीका है जो मैंने इस मुद्दे को ठीक करने के लिए पाया है। धन्यवाद!
डेक्सर

6
मुझे वास्तव में यह उत्तर पसंद है। जब आप केवल एक छोटे से 32-बिट DLL को किसी बिंदु पर कॉल कर रहे हैं तो x86 के लिए संपूर्ण वेबसाइट संकलित करने का कोई मतलब नहीं है।
DanM7

@ डैनियल बॉलिंगर क्या मेरा आवेदन परिवर्तन करने पर 32 बिट प्रक्रिया के रूप में चलेगा?
नौ

@ मैं ऐसा नहीं मानता, क्योंकि यह DLL I को sysWOW64 में पंजीकृत करने में सक्षम नहीं होगा।
डैनियल बॉलिंजर

1
मैं एक ही समस्या है, लेकिन मैं नहीं जानता कि कैसे आवेदन पूल को बदलने के लिए, मुझे यह कहां करना चाहिए, plz मेरी मदद करें
Shima.Y

58

ऐसा लगता है कि आपकी सेवा 'किसी भी सीपीयू' के खिलाफ बनाई गई थी, जिससे आपको 64-बिट पर त्रुटियां होती हैं जहां आप COM घटकों का उपयोग कर रहे हैं। आपको इसके लिए निर्माण करने की आवश्यकता है x86

वेबसाइट शायद 32-बिट प्रक्रिया के रूप में चल रही है, यही वजह है कि यह घटक का उपयोग कर सकती है। आपके समाधान का निर्माण आपकी x86सेवा को 32-बिट के रूप में चलाने के लिए बाध्य करेगा।


मैं भी इसी समस्या का सामना कर रहा हूँ..जहां मेरे डेस्कटॉप एप्लिकेशन को 64 बिट सिस्टम पर सफलतापूर्वक स्थापित किया गया है..इस तरह स्थापना करने पर मैंने सफलतापूर्वक सिंक्रनाइज़ेशन किया है, लेकिन जब मैं अपने सॉफ्टवेयर से सिंक्रोनाइज़ेशन करता हूं तो यह मुझे त्रुटि के ऊपर दिखाई दे रही है
मोहिनी म्हत्रे

मैं पंजीकरण करने की कोशिश कर रहा हूं .ocx file (c:\Windows\SysWow>RegSvr32 genX.ocx)लेकिन त्रुटि हो रही है मॉड्यूल लोड करने में विफल रहा। सुनिश्चित करें कि बाइनरी को निर्दिष्ट पथ पर संग्रहीत किया गया है या बाइनरी या आश्रित .DLL फ़ाइलों के साथ समस्याओं की जांच करने के लिए इसे डीबग करें।
नवीन कुमार

और अगर इसे 32-बिट के रूप में संकलित किया जाता है, तो सिस्टम regsvr32 का उपयोग किया जाना चाहिए, SysWow64 संस्करण नहीं।
Fandango68

SSIS पैकेज चलाते समय मुझे यह त्रुटि हो रही है। कनेक्शन ठीक काम कर रहे हैं। सभी गुण सही हैं। दरअसल SSIS पैकेज कई महीनों से बिना किसी त्रुटि के चल रहा था। अचानक मुझे ऊपर त्रुटि हो रही है। मैंने x64 से x86 तक रनटाइम / डिबगिंग को बदलने की कोशिश की, अभी भी समस्या हल नहीं हुई है।
आईमविश

16

आपको अपने प्रोजेक्ट गुण प्लेटफ़ॉर्म लक्ष्य X86 को कॉन्फ़िगर करने की आवश्यकता नहीं है। तुम भी x86 के साथ काम करने के लिए iis विकल्प कॉन्फ़िगर कर सकते हैं

  • एप्लिकेशन पूल का चयन करें
  • उस पूल को चुनें जिसे आपका ऐप इस्तेमाल करता है
  • एडवांस सेटिंग
  • 32-बिट एप्लिकेशन सक्षम सच

मेरे लिए यह हमेशा सच रहा है। कभी भी प्लेटफ़ॉर्म लक्ष्य को X86 पर सेट नहीं करना पड़ता था, लेकिन हमेशा 32-बिट एप्लिकेशन सक्षम करें = True • सेट पहचान = ApplicationPoolIdentity • लोड उपयोगकर्ता प्रोफ़ाइल = ट्रू
जैथ।

मेरे पास एक ऐसी ही समस्या थी जो नाज़िम के निर्देशों के अनुसार तय की गई थी, लेकिन "एंबेड इंटरॉप टाइप्स" (संदर्भित डीएल की एक संपत्ति) नहीं थी और कॉपी लोकल = सच सेट करें।
cymorg

आप "एप्लिकेशन पूल का चयन करें" कैसे करते हैं?
कोडीबगस्टीन

एप्लीकेशन पूल मेनू बाईं ओर iis मेनू की सूची में है
नाज़िम हतीपोग्लू

16

यदि आप अपने किसी भी सीपीयू एप्लिकेशन को पुनः स्थापित किए बिना इस काम को करने का तरीका ढूंढ रहे हैं, तो यहां एक और संभावित समाधान है:

  1. HKey_Classes_Root \ Wow6432Node \ CLSID \ "GUID} के अंतर्गत अपनी COM ऑब्जेक्ट GUID का पता लगाएँ
  2. एक बार एक नया REG_SZ (स्ट्रिंग) मान जोड़ें। नाम AppID होना चाहिए और डेटा वही COM ऑब्जेक्ट होना चाहिए जो आपने अभी-अभी खोजा है
  3. HKey_Classes_Root \ Wow6432Node \ AppID के तहत एक नई कुंजी जोड़ें। नई कुंजी को COM ऑब्जेक्ट GUID के समान कहा जाना चाहिए।
  4. आपके द्वारा अभी जोड़ी गई नई कुंजी के तहत, एक नया स्ट्रिंग मान जोड़ें, और इसे DllSurrogate कहें। मान को खाली छोड़ दें।
  5. HKey_Local_Machine \ Software \ Classes \ AppID \ के तहत एक नई कुंजी बनाएं फिर से नई कुंजी को COM ऑब्जेक्ट के GUID के समान कहा जाना चाहिए। इस कुंजी के तहत कोई मान जोड़ा जाना आवश्यक नहीं है।

मैं समाधान के लिए कोई श्रेय नहीं लेता, लेकिन इसने हमारे लिए काम किया। अधिक जानकारी और अन्य टिप्पणियों के लिए स्रोत लिंक की जाँच करें।

स्रोत: https://techtalk.gfi.com/32bit-object-64bit-environment/


1
सबसे उत्कृष्ट निर्देश। मैं थर्ड-पार्टी टूल का उपयोग कर रहा था, जिससे मैं बिल्ड प्लेटफ़ॉर्म को बदलने में असमर्थ था। इस समाधान ने उस मुद्दे को दरकिनार कर दिया। धन्यवाद!

मुझे चरण 1 में वर्णित कुंजी मिल गई है, और फिर मुझे पता था कि कौन सी COM वस्तु परेशान कर रही है, तो मैं बस उस पर regsvr32 चलाता हूं। आपका बहुत बहुत धन्यवाद!
माइकल

जब मैंने ऐसा किया तो मेरे स्थानीय वेबसर्वर (IIS) ने पहुंच से वंचित होना शुरू कर दिया। यह मुझे बताता है कि यह सही दिशा में एक कदम था, लेकिन मुझे यकीन नहीं है कि इस बिंदु पर पहुंच कौन देगा। stackoverflow.com/questions/14019401/…
user420667

14

समस्या यह है कि सर्वर प्रक्रिया 64 बिट है और लाइब्रेरी 32-बिट है और यह COM घटक को उसी प्रक्रिया (इन -क्रू सर्वर) में बनाने की कोशिश करता है। या तो आप सर्वर को फिर से खोलें और इसे 32-बिट करें या आप सर्वर को अपरिवर्तित छोड़ दें और COM घटक को आउट-ऑफ-प्रोसेस करें। COM सर्वर को आउट-ऑफ-प्रोसेस करने का सबसे आसान तरीका है COM + एप्लिकेशन - कंट्रोल पैनल -> प्रशासनिक उपकरण -> घटक सेवाएँ।


मुझे COM + एप्लिकेशन बनाने का प्रयास करते समय एक त्रुटि आई। An error occurred while processing the last operation. [Error code 00690075] The event log may contain additional troubleshooting information.
19

8

मैंने कोई संकलन सेटिंग नहीं बदली।

बस AppPool उन्नत सेटिंग्स में "32-बिट एप्लिकेशन = ट्रू सक्षम करें" सेट करें।

इसने मेरे लिए काम किया


1
AppPool Advanced Settings कहाँ है?
CodyBugstein

7

Windows 2008 सर्वर x64 के लिए समाधान है:

  1. cmd.exe को प्रशासक की अनुमति से खोलें।
  2. फ़ोल्डर C: \ Windows \ SysWOW64 पर dll की प्रतिलिपि बनाएँ
  3. C: \ Windows \ SysWOW64 से regsvr32 चलाएं
  4. सत्यापित करें कि dll Windows की रजिस्ट्री में है।
  5. यदि आपके पास .exe x86 है जो dll का उपयोग करता है, तो exe को x86 मोड में संकलित किया जाना चाहिए।
  6. Exe को फ़ोल्डर C: \ Program Files (x86) में स्थापित किया जाना चाहिए

यह प्रक्रिया वैध है, यह ठीक है।


6

मेरे पास एक ही मुद्दा था, लेकिन अन्य उत्तर केवल समाधान के एक हिस्से की आपूर्ति करते थे।

समाधान दो गुना है:

रजिस्टर से 64 बिट निकालें।

  • c: \ windows \ system32 \ regsvr32.exe / U
  • यह अन्य फ़ोल्डरों में dll की अन्य प्रतिलिपि के संदर्भों को नहीं हटाएगा।

या

  • HKEY_CLASSES_ROOT \ CLSID {......} \ InprocServer32 नामक कुंजी ढूँढें। इस कुंजी का डीएलएल का डिफ़ॉल्ट मान के रूप में फ़ाइल नाम होगा।
  • मैंने HKEY_CLASSES_ROOT \ CLSID {......} फ़ोल्डर निकाल दिया।

इसे 32 बिट के रूप में पंजीकृत करें:

  • C:\Windows\SysWOW64\regsvr32 <file.dll>

64 बिट पंजीकरण को हटाने के बिना इसे 32 बिट के रूप में पंजीकृत करना मेरे मुद्दे को हल नहीं करता है।


बिंगो! यही वह उत्तर है जिसकी मुझे तलाश थी (मेरी टिप्पणी कहीं और देखें)। धन्यवाद!
Fandango68

5

एक अलग, लेकिन इसी तरह के फिक्स के साथ संबंधित मुद्दा था:

मेरे पास 64-बिट डीएलएल का उपयोग करके "एनी-सीपीयू" के लिए एक विंडोज़ सेवा परियोजना थी। एक ही त्रुटि संदेश। चीजों का एक पूरा गुच्छा कोशिश की, लेकिन कुछ भी काम नहीं किया। अंत में, मैं प्रोजेक्ट प्रॉपर्टीज़ में गया -> बिल्ड और देखा कि प्रोजेक्ट में "32-बिट को प्राथमिकता दें" चेक किया गया था। यह अनियंत्रित है और कोई और त्रुटि नहीं है।

मेरा अनुमान है कि विंडोज़ सेवा एक 32-बिट DLL की उम्मीद कर रही थी, और वह नहीं मिल सकी।


हालाँकि यह अजीब है लेकिन यह काम करता है !! धन्यवाद
FindOutIslamNow

3

X86 में बदलने के लिए:

  1. अपने समाधान के लिए एक सेटअप प्रोजेक्ट बनाएं।
  2. आप इसे बनाने के बाद, समाधान एक्सप्लोरर पर जाएं, सेटअप प्रोजेक्ट पर राइट क्लिक करें।
    • कॉन्फ़िगरेशन प्रबंधक दबाएँ।
    • "सक्रिय समाधान प्लेटफ़ॉर्म" कॉम्बोक्स पर क्लिक करें और नया चुनें (यदि कोई x86 प्रदर्शित नहीं है)
    • पहले कॉम्बो x86 से चुनें फिर ओके दबाएं।
    • सेटअप प्रोजेक्ट का पुनर्निर्माण करें, फिर सभी प्रोजेक्ट का पुनर्निर्माण करें।

3

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


2
मेरे पास इसके विपरीत था और 32-बिट अनुप्रयोगों को सक्षम करना था।
row1

2

मेरे व्यक्तिगत मामले में समस्या को डेवलपर मशीन पर विंडोज की रजिस्ट्री में वर्ग आईडी के लिए खोज करने के लिए तय किया गया था (क्योंकि समस्या एक क्लाइंट में डाली गई थी)। इस क्रिया को COM घटक में रखा जाएगा जो समस्या का कारण बनता है: मेरे .NET प्रोजेक्ट में संदर्भित x86 लाइब्रेरी जिसे इंस्टॉलर या अपडेटर एप्लिकेशन के लिए OCX / COM के रूप में पंजीकृत नहीं किया जा रहा था

सादर


1

VSTO का उपयोग करने वाले किसी भी व्यक्ति के लिए, मेरे लिए समस्या officeविधानसभा का एक गायब संदर्भ था । यह भी प्रकट होता है यदि आप मैन्युअल रूप से कुछ VSTO ऑब्जेक्ट्स को त्वरित करने का प्रयास कर रहे थे।


1

मैंने पाया कि मेरी समस्या DLL के वास्तविक पंजीकरण से संबंधित है।

पहले CMD प्रॉम्प्ट से "Regedit.exe" चलाएँ (मैंने इसे सुरक्षा स्तर को प्रशासक, "बस के मामले में" उठाया) फिर रजिस्ट्री खोजें (RegEdit मेनू में "संपादित करें / खोजें" पर क्लिक करके या Ctrl + F दबाकर) CLSID के लिए त्रुटि संदेश जो आपको COM वर्ग कारखाने के बारे में प्राप्त हुआ है, दिखा रहा है। मेरी CLSID 29AB7A12-B531-450E-8F7A-EA94C2F3C0CF थी। जब यह कुंजी मिल जाती है, तो उस हाइव नोड के तहत उप-कुंजी "InProcServer2" का चयन करें और दाहिने हाथ Regedit फ्रेम में समस्या DLL के फ़ाइल नाम का पता लगाएं। "डिफ़ॉल्ट" के तहत दिखा रहा है। यदि वह फ़ाइल "C: \ Windows \ SysWow64" (जैसे C: \ Windows \ SysWow64 \ Redemption.dll ") में रहती है, तो यह महत्वपूर्ण है कि आप" C: \ Windows \ SysWow64 \ RegSvr32.exe "फ़ाइल का उपयोग करें कमांड लाइन से उस DLL को पंजीकृत करें और डिफ़ॉल्ट नहीं "C: C: \ Windows \ SysWow64 \ RegSvr32.exe c: \ Windows \ SysWow64 \ Redemption.dll प्रेस दर्ज करें। कमांड विंडो बंद करें ("बाहर निकलें" के माध्यम से फिर अपने कंप्यूटर को पुनरारंभ करें (हमेशा बंद डाउन के बजाय पुनरारंभ का उपयोग करें) तब से प्रारंभ करें, क्योंकि (अजीब तरह से) पुनरारंभ करें एक पूरी तरह से शट डाउन करें और सब कुछ फिर से लोड करें जबकि "शट डाउन" और पावर-अप एक विंडो को फिर से लोड करता है। ड्राइवरों और अन्य मूल्यों का संग्रहित कैश (जो दोषपूर्ण हो सकता है)। जब भी आप भविष्य में एक DLL रजिस्टर करते हैं, तो C: \ Windows \ S \ _Wow64 फ़ोल्डर में संग्रहीत किसी भी DLL के लिए SysWow64 "RegSvr32.exe" का उपयोग करना याद रखें और यह समस्या c (यदि यह गलत पंजीकरण के कारण होता है) फिर से नहीं होना चाहिए।


महान टिप, लेकिन बस इस बात से अवगत रहें कि SysWow64 में 32 बिट DLL को पंजीकृत करना तब माना जाता है कि DLL के पास 64 बिट अनुरोधों को संभालने के लिए एक रैपर है।
Fandango68

0

मेरी समस्या यह थी कि मेरे प्रोजेक्ट सन्दर्भ में गलत MS Sync फ्रेमवर्क संस्करण (1.0) था। 2.1 संस्करण के अपडेट के बाद, त्रुटि चली गई और जीवन फिर से अच्छा है।


0

मेरे मामले में, मैं की तरह एमएस कार्यालय फ़ाइल का निर्माण कर रहा हूँ wordया excel, मैं चलाने Win+Rऔर निष्पादित dcomcnfg, DCOM कॉन्फ़िग में, (नाम में शामिल है जैसे चुनिंदा कार्यालय से संबंधित नाम आइटम के अलावा Excelया Wordया Office) और Open the properties, select Identity tab and select the interactive user.के रूप में इस सवाल का जवाब ,

मेरा त्रुटि संदेश दिखाता है CLSID {000209FF-0000-0000-C000-000000000046}, इसलिए मुझे DCOM कॉन्फ़िग में इस विशिष्ट CLSID को खोजने का प्रयास करना होगा, और यह एक्ससाइट्स करता है, और मैं इसे चुनता हूं और उसी चरण का पालन करता हूं interactive user, फिर यह काम करता है।

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