2011-08-25 10 views
35

एक 64 बिट खिड़कियों से एक काम कर रहे सी # परियोजना चलती 7 मशीन एक 32 बिट XP मशीन के लिए निम्न त्रुटि के कारण:COMException त्रुटि 80040154 की मरम्मत कैसे करें?

Retrieving the COM class factory for component with CLSID {681EF637-F129-4AE9-94BB-618937E3F6B6} failed due to the following error: 80040154.

681EF637-F129-4AE9-94BB-618937E3F6B6 तो यह नहीं है रजिस्ट्री में नहीं है ठीक से स्थापित है, लेकिन यह वही आईडी है जो पहले 64 बिट विंडोज 7 मशीन पर एक समस्या थी। 64 बिट विंडोज 7 मशीन पर इस त्रुटि का समाधान here (प्लेटफार्म लक्ष्य को x86 में बदलें) मिला लेकिन यह 32 बिट एक्सपी मशीन पर समस्या का समाधान नहीं करता है। मैं 681EF637-F129-4AE9-94BB-618937E3F6B6 से जुड़े डीएल को कैसे ढूंढूं, या इससे भी बेहतर, मैं इस अपवाद को कैसे सुधारूं?

+0

जहां तक ​​मुझे पता है, प्रक्रियाओं (64 या 32) के लिए 32 बिट डीएल (क्रमशः 32 या 64) लोड करने का कोई तरीका नहीं है। – Arun

+0

ध्यान दें कि त्रुटि कोड REGDB_E_CLASSNOTREG है। तो यह तब हो सकता है जब मशीन पर COM/ActiveX नियंत्रण स्थापित नहीं होता है या प्रक्रिया के गद्दे के लिए स्थापित नहीं किया जाता है। –

उत्तर

20

डीएलएल खोजने के लिए, अपनी 64-बिट मशीन पर जाएं और रजिस्ट्री खोलें। HKEY_CLASSES_ROOT\CLSID\{681EF637-F129-4AE9-94BB-618937E3F6B6}\InprocServer32 नामक कुंजी खोजें। इस कुंजी में डीएलएल का फ़ाइल नाम इसके डिफ़ॉल्ट मान के रूप में होगा।

यदि आपने अपनी 64-बिट मशीन पर x86 के लिए अपनी परियोजना को पुन: संकलित करके समस्या हल की है, तो आपको सामान्य स्थान की बजाय रजिस्ट्री के 32-बिट हिस्से को देखना होगा। यह HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{681EF637-F129-4AE9-94BB-618937E3F6B6}\InprocServer32 है।

यदि डीएलएल 32 बिट्स के लिए बनाया गया है तो आप इसे सीधे 32-बिट मशीन पर उपयोग कर सकते हैं। यदि यह 64 बिट्स के लिए बनाया गया है तो आपको विक्रेता से संपर्क करना होगा और उनसे 32-बिट संस्करण प्राप्त करना होगा।

जब आपके पास DLL है, तो इसे c: \ windows \ system32 \ regsvr32.exe चलाकर पंजीकृत करें।

11

मुझे विंडोज सेवा में एक ही समस्या थी। सभी कुंजी जहां रजिस्ट्री में सही जगह पर है। सेवा का निर्माण x86 के लिए किया गया था और मुझे अभी भी अपवाद मिला है। मुझे CorFlags.exe

32 बिट के तहत चलाए जाने पर सत्यापित करने के लिए अपने service.exe पर फ्लैग के बिना इसे चलाएं। अगर झंडा /32BIT+ /Force (हस्ताक्षरित विधानसभाओं के लिए केवल सेना)

साथ यह नहीं चलाते हैं तो आप यूएसी कर दिया है आपको निम्न त्रुटि प्राप्त कर सकते हैं: corflags : error CF001 : Could not open file for writing उपयोगकर्ता विधानसभाओं पर पूरा नियंत्रण दे।

Console output

+0

क्या आप स्पष्टीकरण दे सकते हैं - स्क्रीनशॉट क्या छवि झंडे होना चाहिए? या स्क्रीनशॉट की स्थिति क्या है जो आपके लिए समस्याएं पैदा करती है? मुझे पोस्टर का कॉमेक्सप्शन मिल रहा है और मेरे निष्पादन योग्य स्क्रीनशॉट के समान सटीक झंडे हैं। –

+0

@ कैल्विनफ़िशर यह स्क्रीनशॉट है कि यह कैसे होना चाहिए। (मेरे मामले में) –

7

वैकल्पिक हल:

संभावित समाधान, (परियोजना के गुण में, बिल्ड/मंच के लक्ष्य) से 'X86' को 'किसी भी सीपीयू' अपनी परियोजना के मंच को संशोधित है

ROOTCAUSE

वीएसएस इंटरऑप 32-बिट फ्रेमवर्क का उपयोग कर एक प्रबंधित असेंबली है और डीएल में 32-बिट COM ऑब्जेक्ट होता है। यदि आप 64 बिट वातावरण में यह COM dll चलाते हैं, तो आपको त्रुटि संदेश मिलेगा।

ऊपर
Dim xls As New MyExcel.Interop.Application 
Dim xlb As MyExcel.Interop.Workbook 

दो पंक्तियों थे मेरे रूप में वैश्विक घोषित तो मैं स्थानीय कार्य करने के लिए इन दो पंक्तियों चले गए और अब:

-2

ले जाएँ चर जो स्थानीय करने के लिए अपने रूप में वैश्विक घोषणा की तरह मेरे रूप में मेरे पास है कर रहे हैं उत्कृष्टता उपकरण ठीक काम कर रहा है।

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