Ketika saya mencoba untuk membuat sebuah instance dari kelas COM itu melempar pengecualian sebagai
Kelas tidak terdaftar (Pengecualian dari HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
Tolong beri tahu bagaimana saya bisa mengatasinya?
Ketika saya mencoba untuk membuat sebuah instance dari kelas COM itu melempar pengecualian sebagai
Kelas tidak terdaftar (Pengecualian dari HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
Tolong beri tahu bagaimana saya bisa mengatasinya?
Jawaban:
Sepertinya program atau proses mana pun yang Anda coba inisialisasi tidak diinstal di komputer Anda, memiliki penginstalan yang rusak, atau perlu didaftarkan.
Instal, perbaiki (melalui Tambah / Hapus Program) atau daftarkan (melalui Regsvr32.exe).
Anda belum memberikan informasi yang cukup bagi kami untuk membantu Anda lebih dari ini.
Anda perlu memastikan semua rakitan Anda dikompilasi untuk arsitektur yang benar. Coba ubah arsitektur untuk x86 jika menginstal ulang komponen COM tidak berhasil.
Masalah saya dan solusinya
Saya memiliki dll pihak ketiga 32 bit yang telah saya instal di mesin 2008 R2 yaitu 64 bit.
Saya memiliki layanan wcf yang dibuat dalam kerangka kerja .net 4.5 yang memanggil dll pihak ketiga 32 bit untuk proses. Sekarang saya telah membangun properti yang ditetapkan untuk menargetkan cpu 'any' dan menerapkannya ke mesin 64 bit.
ketika saya mencoba memanggil layanan wcf mendapat kesalahan "80040154 Kelas tidak terdaftar (Pengecualian dari HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG"
Sekarang saya menggunakan ProcMon.exe untuk melacak masalah registri com dan mengidentifikasi bahwa proses mencari entri registri di HKLM \ CLSID dan HKCR \ CLSID di mana tidak ada entri.
Datang untuk mengetahui bahwa Microsoft tidak akan mendaftarkan komponen com 32 bit ke jalur HKLM \ CLSID, HKCR \ CLSID di mesin 64 bit melainkan menempatkan entri di jalur HKLM \ Wow6432Node \ CLSID dan HKCR \ Wow6432Node \ CLSID.
Sekarang konfliknya adalah proses 64 bit mencoba memanggil proses 32 bit di mesin 64 bit yang akan mencari entri registri di HKLM \ CLSID, HKCR \ CLSID. Solusinya adalah kita harus memaksa proses 64 bit untuk melihat entri registri di HKLM \ Wow6432Node \ CLSID dan HKCR \ Wow6432Node \ CLSID.
Ini dapat dicapai dengan mengkonfigurasi properti proyek layanan wcf untuk menargetkan mesin 'X86', bukan 'Any'.
Setelah menyebarkan versi 'X86' ke server 2008 R2 mendapat masalah "System.BadImageFormatException: Tidak dapat memuat file atau perakitan"
Solusi untuk badimageformatexception ini adalah mengatur 'Enable32bitApplications' menjadi 'True' di properti IIS Apppool untuk apppool yang tepat.
Perhatikan juga bahwa konteks kelas saat menginisialisasi dapat membuat pengecualian tersebut. Jika Anda memiliki objek yang dikodekan sebagai INPROC_SERVER tetapi Anda mencoba CoCreateInstance sebagai CLSCTX_LOCAL_SERVER, Anda juga akan mendapatkan kesalahan itu.
Anda perlu memastikan objek terdaftar dan CoCreateInstance membuat sebuah instance dengan konteks kelas yang benar.
DesktopWallpapermenggunakan CLSCTX_INPROC(bukan CLSCTX_ALL) Anda akan mendapatkan 0x80040154 (REGDB_E_CLASSNOTREG)kesalahan.
Saya membuatnya berfungsi dengan Mengaktifkan aplikasi 32 bit di pengaturan lanjutan Pool Aplikasi. Klik kanan pada pool aplikasi dan pilih pengaturan lanjutan - aktifkan aplikasi 32 bit. Ini dapat membantu seseorang di luar sana.
Dengan mendaftarkan kelas (khususnya CLSID-nya) - lihat misalnya di sini .
Dalam kasus saya, kelas terdaftar dengan benar dan dibangun dalam mode CPU / 64 bit APAPUN .
Tetapi properti Aktifkan Aplikasi 32-bit dari kumpulan Aplikasi IIS dari aplikasi yang menggunakan kelas telah disetel ke True .
Kelas tidak ditemukan karena ketidaksesuaian arsitektur antara konfigurasi kumpulan aplikasi dan kelas terdaftar yang sebenarnya.
Pengaturan Enable 32-bit Applications to False memperbaiki masalah ini.

Saya mengalami masalah ini memanggil rakitan .Net dari klien C ++ melalui COM. Ternyata salah satu rakitan tempat perakitan .Net bergantung tidak dapat ditemukan. Saya bergumul sebentar mencoba mencari tahu apa yang salah dengan rakitan pertama, tetapi itu sebenarnya salah satu dependensi rakitan pertama. Saya menerima dua kesalahan berbeda saat memanggil CoCreateInstance () dari klien C ++. Yang pertama adalah: REGDB_E_CLASSNOTREG Kelas tidak terdaftar Dan percobaan kedua adalah: 0x80131040: Definisi manifes rakitan yang terletak tidak cocok dengan referensi rakitan.
Jadi periksa apakah referensi majelis Anda ada. Saya menemukan ini dengan menjelajahi perakitan pertama dengan dotPeek dan memperhatikan salah satu referensinya hilang. Menempatkan versi yang benar dari ketergantungan di folder menyelesaikan kedua kesalahan.
Saya sedang menyusun aplikasi saya yang menargetkan CPU apa pun dan masalah utama ternyata adobe reader diinstal v10.x lama perlu memutakhirkan v11.x , ini adalah cara saya menyelesaikan masalah ini.
Saya mengalami masalah yang sama menggunakan kelas COM, yaitu 'Kelas tidak pengecualian terdaftar' pada saat runtime. Bagi saya, saya bisa menyelesaikannya dengan membuka file app.config dan mengubah elemen 'startup' dan 'supportRuntime' menjadi sesuatu seperti:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
Anda dapat membaca lebih lanjut tentang detailnya di sini http://stackoverflow.com/questions/1604663/
dan di sini https://msdn.microsoft.com/en-us/library/w4atty68(v=vs.110).aspx
Saya harus mencatat bahwa saya menjalankan Visual Studio 2017. Target cpu = x86 Embed Interop Type = true (di jendela properti)
Buka direktori .NET framework dan daftarkan dll masing-masing dengan jalur dll spasi putih Regsvr32.exe .
Saya menghadapi masalah yang sama. Setelah melakukan beberapa penelitian saya menemukan perbaikan untuk saya dan semoga bermanfaat. Masalahnya tidak hanya terkait dengan instalasi ulang seperti pengamatan saya, itu tergantung pada izin akses juga.
Langkah 1: Perbaiki objek COM tertentu.
Langkah 2: Layanan Komponen> Komputer> Komputer Saya> Konfigurasi DCOM> Pilih objek COM Anda> Klik kanan> Properti> tab Keamanan> Izin Akses> Pilih Kustomisasi> Klik EDIT> Pilih IIS_USER (Jika tidak ada, buat dengan hak lengkap) dan berikan lengkap akses dan klik OK.
Pindah ke tab Identity> Anda dapat memilih "Pengguna interaktif" atau "Pengguna ini"> Klik Terapkan dan OK. Jika Anda memilih "Pengguna ini", kami harus memberikan pengguna dengan hak Administratif ke server itu
Langkah 3: Buka Manajer IIS> Mulai Ulang Kumpulan Aplikasi.
Catatan: Jika diperlukan, silakan restart server
Di sini temukan solusinya, jalankan alat mmc -32 (bukan dcomcfg)
Pada sistem 64 bit dengan Office 32 bit, coba ini:
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
