วิธีแก้ COM Exception Class ไม่ได้ลงทะเบียน (ข้อยกเว้นจาก HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))


93

เมื่อฉันพยายามสร้างอินสแตนซ์ของคลาส COM มันจะแสดงข้อยกเว้นเป็น

ไม่ได้ลงทะเบียนคลาส (ข้อยกเว้นจาก HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

โปรดแนะนำว่าฉันจะแก้ปัญหาได้อย่างไร


1
คุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับรหัสได้หรือไม่?
Xaisoft

10
มีสองคำถาม: 1. คุณติดตั้ง / ลงทะเบียนคอมโพเนนต์ COM บนเครื่อง Windows 7 x64 หรือไม่? 2. อะไรคือแพลตฟอร์มเป้าหมายของแอปพลิเคชันของคุณฉันคิดว่าคุณควรตั้งค่าแพลตฟอร์มเป็น x86 โปรดอย่าตั้งเป็น "CPU ใด ๆ "? โปรดลงทะเบียน COM ก่อนแล้วจึงเรียกใช้เพื่อทดสอบแอปพลิเคชันโปรดดูเอกสาร: support.microsoft.com/kb/146219และคำอธิบายการใช้งาน Regsvr32 และข้อความแสดงข้อผิดพลาด
JackWang

ฉันแก้ไขโดยไม่เปลี่ยนเป้าหมายการสร้างเป็น 'x86' วิธีแก้ไขในลิงค์: < stackoverflow.com/a/55513690/11310933 >
Sunil Xtha

คำตอบ:


49

ดูเหมือนว่าโปรแกรมหรือกระบวนการใดที่คุณกำลังพยายามเริ่มต้นนั้นไม่ได้ติดตั้งบนเครื่องของคุณมีการติดตั้งที่เสียหายหรือจำเป็นต้องลงทะเบียน

ติดตั้งซ่อมแซม (ผ่าน Add / Remove Programs) หรือลงทะเบียน (ผ่าน Regsvr32.exe)

คุณไม่ได้ให้ข้อมูลเพียงพอสำหรับเราที่จะช่วยเหลือคุณมากไปกว่านี้


4
คิดว่าคุณหมายถึง RegSvr32.exe (ตามที่ต่อต้าน RegSrv32.exe)
windowsgm

60

คุณต้องแน่ใจว่าแอสเซมบลีทั้งหมดของคุณคอมไพล์สำหรับสถาปัตยกรรมที่ถูกต้อง ลองเปลี่ยนสถาปัตยกรรมสำหรับ x86 หากการติดตั้งคอมโพเนนต์ COM ใหม่ไม่ได้ผล


สิ่งนี้ช่วยแก้ไขกระบวนการของฉันไม่พบไคลเอนต์ NAV 2009 R2 (ClassID 50000004-0000-1000-0001-0000836BD2D2)
Vincent Vancalbergh

14

ปัญหาของฉันและวิธีแก้ปัญหา

ฉันมี dll ของบุคคลที่สาม 32 บิตซึ่งฉันได้ติดตั้งในเครื่อง 2008 R2 ซึ่งเป็น 64 บิต

ฉันมีบริการ wcf ที่สร้างใน. net 4.5 framework ซึ่งเรียกใช้ dll ของบุคคลที่สาม 32 บิตสำหรับกระบวนการ ตอนนี้ฉันได้สร้างคุณสมบัติที่ตั้งค่าเป็นเป้าหมาย 'cpu' ใด ๆ และปรับใช้กับเครื่อง 64 บิต

เมื่อฉันพยายามเรียกใช้บริการ wcf มีข้อผิดพลาด "80040154 คลาสไม่ได้ลงทะเบียน (ข้อยกเว้นจาก HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG"

ตอนนี้ฉันใช้ ProcMon.exe เพื่อติดตามปัญหารีจิสทรีของ com และระบุว่ากระบวนการนี้กำลังค้นหารายการรีจิสทรีที่ HKLM \ CLSID และ HKCR \ CLSID ซึ่งไม่มีรายการ

ทราบมาว่า Microsoft จะไม่ลงทะเบียนคอมโพเนนต์ 32 บิต com ไปยังพา ธ HKLM \ CLSID, HKCR \ CLSID ในเครื่อง 64 บิต แต่จะวางรายการในเส้นทาง HKLM \ Wow6432Node \ CLSID และ HKCR \ Wow6432Node \ CLSID

ตอนนี้ข้อขัดแย้งคือกระบวนการ 64 บิตที่พยายามเรียกใช้กระบวนการ 32 บิตในเครื่อง 64 บิตซึ่งจะค้นหารายการรีจิสทรีใน HKLM \ CLSID, HKCR \ CLSID วิธีแก้ปัญหาคือเราต้องบังคับให้กระบวนการ 64 บิตดูรายการรีจิสทรีที่ HKLM \ Wow6432Node \ CLSID และ HKCR \ Wow6432Node \ CLSID

สิ่งนี้สามารถทำได้โดยการกำหนดค่าคุณสมบัติโครงการบริการ wcf เพื่อกำหนดเป้าหมายไปยังเครื่อง "X86" แทน "Any"

หลังจากปรับใช้เวอร์ชัน 'X86' กับเซิร์ฟเวอร์ 2008 R2 พบปัญหา "System.BadImageFormatException: ไม่สามารถโหลดไฟล์หรือแอสเซมบลี"

วิธีแก้ปัญหา badimageformatexception นี้คือการตั้งค่า 'Enable32bitApplications' เป็น 'True' ในคุณสมบัติ IIS Apppool สำหรับแอปพูลที่เหมาะสม


โปรดอย่าโพสต์คำตอบที่เหมือนกันสำหรับคำถามหลายข้อ โพสต์คำตอบที่ดีหนึ่งคำตอบจากนั้นโหวต / ตั้งค่าสถานะเพื่อปิดคำถามอื่นที่ซ้ำกัน หากคำถามไม่ซ้ำกันให้ปรับแต่งคำตอบของคุณให้เหมาะกับคำถามนั้น
kleopatra

10

โปรดทราบว่าบริบทของคลาสเมื่อเริ่มต้นสามารถสร้างข้อยกเว้นนั้นได้ หากคุณมีวัตถุที่เข้ารหัสเป็น INPROC_SERVER แต่คุณพยายาม CoCreateInstance เป็น CLSCTX_LOCAL_SERVER คุณจะได้รับข้อผิดพลาดนั้นด้วย

คุณต้องแน่ใจว่าวัตถุได้รับการลงทะเบียนแล้วและ CoCreateInstance กำลังสร้างอินสแตนซ์ที่มีบริบทของคลาสที่ถูกต้อง


ใช่ถ้าตัวอย่างเช่นคุณพยายามสร้างDesktopWallpaperโดยใช้CLSCTX_INPROC(แทนCLSCTX_ALL) คุณจะได้รับ0x80040154 (REGDB_E_CLASSNOTREG)ข้อผิดพลาด
user362515

9

หากคุณใช้คอมโพเนนต์ COM 64 บิตในเว็บแอปพลิเคชันบน IIS ตรวจสอบให้แน่ใจว่าพูลแอปพลิเคชันถูกตั้งค่าไม่ให้อนุญาตแอปพลิเคชัน 32 บิต ( เปิดใช้งานแอปพลิเคชัน32 บิต: เท็จในการตั้งค่าขั้นสูง)


5

ฉันทำให้มันทำงานได้โดยการเปิดใช้งานแอปพลิเคชัน 32 บิตในการตั้งค่าขั้นสูงของ Application Pool คลิกขวาที่แอปพลิเคชันพูลและเลือกการตั้งค่าขั้นสูง - เปิดใช้งานแอปพลิเคชัน 32 บิต สิ่งนี้อาจช่วยใครบางคนได้


เหมือนกับฉัน. dll 32 บิตที่ใช้บนเครื่อง dev 64 บิตการทดสอบ 64 บิตและเซิร์ฟเวอร์สด 64 บิต ทำงานได้ดีในกล่อง dev เมื่อนำไปใช้กับการทดสอบและเซิร์ฟเวอร์ที่ใช้งานจริงจะล้มเหลวจนกว่าแอป 32 บิตจะได้รับอนุญาตใน IIS App Pools ตามลำดับและพูลเริ่มต้นใหม่ ฉันต้องปิด "Embed Interop types" (การตั้งค่าใน dll ที่ละเมิดใน VS) และตั้งค่า "Copy Local" = true เพื่อให้แน่ใจว่า dll ถูกคัดลอกในรูปแบบดั้งเดิมไปยังเซิร์ฟเวอร์จริงๆ
cymorg

3

โดยการลงทะเบียนชั้น (เฉพาะ CLSID ของมัน) - ดูเช่นที่นี่


อาจเป็นวัตถุบางอย่างที่ต้องติดตั้งบนเครื่องหรือเซิร์ฟเวอร์ของเขาหรือไม่ไม่จำเป็นต้องลงทะเบียนคลาส
Xaisoft

โดยทั่วไปแล้ว @Xaisoft "การติดตั้ง" จะเกี่ยวข้องกับ "การลงทะเบียน" เนื่องจาก URL ของ MSDN ที่ฉันชี้ให้เห็น
Alex Martelli


2

วิธีที่ฉันแก้ไขปัญหานี้คือการลงทะเบียนCOMผ่านregsvr32.

ตรวจสอบให้แน่ใจว่า COM ที่คุณเรียกใช้นั้นได้รับการลงทะเบียนแล้ว

แอปพลิเคชันของฉันใช้งานอยู่xceedcry.dllและฉันไม่ได้ลงทะเบียน เมื่อฉันลงทะเบียนแล้วแอปพลิเคชันก็ทำงานได้ดี


2

วิธีแก้ปัญหาของฉันคือเปลี่ยน " เปิดใช้งานแอปพลิเคชัน 32 บิต " เป็น True ในการตั้งค่าขั้นสูงของกลุ่มแอปสัมพัทธ์ใน IIS

แอพพูล

เปิดใช้งานแอปพลิเคชัน 32 บิต


2

ในกรณีของฉันคลาสได้รับการลงทะเบียนอย่างถูกต้องและสร้างขึ้นใน โหมดCPU / 64 บิตใด ๆ

แต่เปิดใช้งานโปรแกรม 32 บิตทรัพย์สินของสระว่ายน้ำ IIS แอพลิเคชันของแอพลิเคชันที่ใช้ในชั้นเรียนถูกกำหนดให้ทรู

ไม่พบคลาสเนื่องจากสถาปัตยกรรมไม่ตรงกันระหว่างคอนฟิกูเรชันพูลแอ็พพลิเคชันและคลาสที่ลงทะเบียนจริง

การตั้งค่าเปิดใช้งานแอปพลิเคชั่น 32 บิตเป็นFalse ช่วยแก้ไขปัญหา การตั้งค่า IIS App Pool



1

ฉันมีปัญหาเดียวกันกับการใช้ MapWinGis ฉันพบวิธีแก้ปัญหาโดยทำงานบนหน้าต่าง Visual Studio 2015 ในรูปแบบ proyect เพียงคลิกขวาที่ proyect-> properties-> Build ตั้งค่าการกำหนดค่าเป็นการกำหนดค่าทั้งหมดและใน conbobox "เป้าหมายแพลตฟอร์ม" ตั้งค่าเป็น x64


0

ฉันพบปัญหานี้ในการเรียกแอสเซมบลี. Net จากไคลเอนต์ C ++ ผ่าน COM ปรากฎว่าไม่พบหนึ่งในแอสเซมบลีของแอสเซมบลี. Net ที่ขึ้นอยู่กับไม่พบ ฉันต่อสู้อยู่พักหนึ่งเพื่อพยายามคิดว่ามีอะไรผิดปกติกับการชุมนุมครั้งที่ 1 แต่จริงๆแล้วมันเป็นหนึ่งในการอ้างอิงของการชุมนุมครั้งที่ 1 ฉันได้รับข้อผิดพลาดสองข้อที่แตกต่างกันเมื่อเรียก CoCreateInstance () จากไคลเอนต์ C ++ ครั้งแรกคือ: REGDB_E_CLASSNOTREG คลาสไม่ได้ลงทะเบียน และการลองครั้งที่สองคือ: 0x80131040: นิยามรายการของแอสเซมบลีที่อยู่ไม่ตรงกับการอ้างอิงแอสเซมบลี

ดังนั้นตรวจสอบว่ามีการอ้างอิงการชุมนุมของคุณอยู่ ฉันค้นพบสิ่งนี้โดยเรียกดูแอสเซมบลีที่ 1 ด้วย dotPeek และสังเกตเห็นหนึ่งในการอ้างอิงขาดหายไป การวางเวอร์ชันที่ถูกต้องของการอ้างอิงในโฟลเดอร์จะช่วยแก้ไขข้อผิดพลาดทั้งสอง


0

ฉันกำลังรวบรวมแอปพลิเคชันของฉันที่กำหนดเป้าหมายCPUและปัญหาหลักปรากฎว่า adobe reader ที่ติดตั้งv10.xรุ่นเก่าต้องอัพเกรด v11.xนี่คือวิธีที่ฉันจะแก้ไขปัญหานี้ได้


0

ฉันพบปัญหาเดียวกันโดยใช้คลาส COM นั่นคือ 'คลาสไม่ได้ลงทะเบียนข้อยกเว้น' ที่รันไทม์ สำหรับฉันฉันสามารถแก้ไขได้โดยไปที่ไฟล์ app.config และเปลี่ยนองค์ประกอบ 'เริ่มต้น' และ 'รันไทม์ที่รองรับ' เป็น:

<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).aspx

ฉันควรทราบว่าฉันใช้ Visual Studio 2017 Target cpu = x86 Embed Interop Type = true (ในหน้าต่างคุณสมบัติ)



0

ฉันประสบปัญหาเดียวกัน หลังจากทำวิจัยแล้วฉันพบวิธีแก้ไขสำหรับฉันและอาจมีประโยชน์ ปัญหาไม่เพียง แต่เกี่ยวข้องกับการติดตั้งใหม่ตามการสังเกตของฉัน แต่ยังขึ้นอยู่กับสิทธิ์การเข้าถึงด้วย

ขั้นตอนที่ 1: ซ่อมแซมวัตถุ COM เฉพาะ

ขั้นตอนที่ 2: บริการคอมโพเนนต์> คอมพิวเตอร์> คอมพิวเตอร์ของฉัน> การกำหนดค่า DCOM> เลือกวัตถุ COM ของคุณ> คลิกขวา> คุณสมบัติ> แท็บความปลอดภัย> สิทธิ์การเข้าถึง> เลือกกำหนดเอง> คลิกแก้ไข> เลือก IIS_USER (หากไม่มีอยู่ให้สร้างด้วยสิทธิ์ที่สมบูรณ์) และให้สมบูรณ์ เข้าถึงและคลิกตกลง

ย้ายไปที่แท็บ Identity> คุณสามารถเลือก "ผู้ใช้แบบโต้ตอบ" หรือ "ผู้ใช้รายนี้"> คลิกใช้และตกลง หากคุณเลือก "ผู้ใช้รายนี้" เราจะต้องให้สิทธิ์ผู้ดูแลระบบแก่เซิร์ฟเวอร์นั้น

ขั้นตอนที่ 3: เปิด IIS Manager> รีสตาร์ท Application Pools

หมายเหตุ: หากจำเป็นโปรดรีสตาร์ทเซิร์ฟเวอร์


-1

ที่นี่ค้นหาวิธีแก้ปัญหาเรียกใช้เครื่องมือ mmc -32 (ไม่ใช่ dcomcfg)

บนระบบ 64 บิตพร้อม Office 32 บิตให้ลองทำดังนี้:

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

ป้อนคำอธิบายภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.