Ketika saya mencoba untuk membuat sebuah instance dari sebuah kelas COM melempar pengecualian sebagai
Kelas tidak terdaftar (Pengecualian dari HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
Silakan menyarankan bagaimana aku bisa menyelesaikannya?
Anda perlu memastikan bahwa semua majelis yang menyusun untuk memperbaiki arsitektur. Cobalah mengubah arsitektur x86 jika menginstal ulang komponen COM doesn't bekerja.
Sepertinya apapun program atau proses yang anda're berusaha untuk menginisialisasi baik isn't diinstal pada mesin anda, memiliki instalasi rusak atau harus terdaftar.
Baik menginstalnya, perbaikan itu (melalui Add/Remove Program) atau mendaftar (via Regsvr32.exe).
Anda belum't memberikan informasi yang cukup bagi kita untuk membantu anda setiap lebih dari ini.
Masalah dan solusi
Saya memiliki 32 bit pihak ketiga dll yang saya telah menginstal pada tahun 2008 R2 mesin yang 64 bit.
Saya memiliki wcf service yang dibuat di .net framework 4.5 yang menyebut 32 bit pihak ketiga dll untuk proses. Sekarang saya telah membangun properti diatur ke target 'ada' cpu dan dikerahkan untuk mesin 64 bit.
ketika saya mencoba untuk memanggil layanan wcf ada kesalahan "80040154 Kelas tidak terdaftar (Pengecualian dari HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG"
Sekarang saya digunakan ProcMon.exe untuk melacak com registry masalah 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 32 bit com komponen untuk jalan HKLM\CLSID, HKCR\CLSID di mesin 64 bit melainkan tempat-tempat yang masuk di HKLM\Wow6432Node\CLSID dan HKCR\Wow6432Node\CLSID jalan.
Sekarang konflik adalah 64 bit proses yang mencoba untuk memanggil 32 bit proses di mesin 64 bit yang akan terlihat untuk entri registri di HKLM\CLSID, HKCR\CLSID. Solusinya adalah kita harus memaksa 64 bit proses untuk melihat entri registri di HKLM\Wow6432Node\CLSID dan HKCR\Wow6432Node\CLSID.
Hal ini dapat dicapai dengan mengkonfigurasi layanan wcf proyek properti untuk target untuk 'X86' mesin bukan 'Ada'.
Setelah menyebarkan 'X86' versi 2008 R2 server punya masalah "System.BadImageFormatException: Could not load file or assembly"
Solusi untuk ini badimageformatexception adalah pengaturan 'Enable32bitApplications' untuk 'Benar' di IIS Apppool properti untuk hak apppool.
Juga perhatikan bahwa kelas konteks ketika inisialisasi dapat membuat pengecualian itu. Jika anda memiliki sebuah objek yang dikodekan sebagai INPROC_SERVER tapi anda mencoba untuk CoCreateInstance sebagai CLSCTX_LOCAL_SERVER, anda juga akan mendapatkan kesalahan itu.
Anda perlu memastikan objek yang terdaftar dan CoCreateInstance adalah menciptakan sebuah instance dengan benar konteks kelas.
Aku punya itu untuk bekerja dengan Mengaktifkan aplikasi 32 bit di kolam Renang Aplikasi pengaturan lanjutan. Klik kanan pada aplikasi outdoor dan pilih advanced settings - mengaktifkan aplikasi 32 bit. Hal ini dapat membantu seseorang di luar sana.
Cara saya menyelesaikan masalah ini adalah untuk mendaftarkan COM
melalui regsvr32
.
memastikan bahwa COM anda menerapkan terdaftar.
Aplikasi saya menggunakan xceedcry.dll
dan aku tidak mendaftar. Setelah saya terdaftar, aplikasi bekerja dengan baik.
Saya memiliki masalah yang sama menggunakan MapWinGis. Saya menemukan solusi, bekerja pada visual studio 2015 windows forms proyect, cukup klik kanan pada proyect-> sifat-> Membangun, mengatur konfigurasi untuk Semua konfigurasi dan di conbobox "platform target" set ke x64.
Saya telah menghadapi masalah yang sama. Setelah dilakukan beberapa penelitian, saya menemukan perbaiki untuk saya dan itu mungkin berguna. Masalah ini tidak hanya berkaitan dengan instalasi ulang karena dari pengamatan saya, hal ini tergantung pada izin akses juga.
Langkah 1: Perbaikan tertentu objek COM.
Langkah 2: Komponen Layanan > Komputer > My Komputer > DCOM Config > Pilih objek COM > klik Kanan > Sifat > Keamanan tab > Izin Akses > Pilih Customize > Klik EDIT > Pilih IIS_USER (Jika tidak ada buat dengan menyelesaikan hak-hak) dan memberikan akses lengkap dan klik OK.
Pindah ke Identitas tab > Anda dapat memilih "pengguna Interaktif" atau "user" > Klik Apply dan OK. Jika anda memilih "user", kita harus memberikan Administratif istimewa pengguna ke server
Langkah 3: Buka IIS Manager > me-Restart Aplikasi Outdoor.
Catatan: Jika diperlukan silakan restart server
Aku berlari ke dalam masalah ini memanggil .Net perakitan dari C++ klien via COM. Ternyata salah satu majelis .Net perakitan tergantung pada tidak dapat ditemukan. Saya bergumul untuk sementara waktu mencoba untuk mencari tahu apa yang salah dengan 1st perakitan, tapi itu benar-benar salah satu dari 1st perakitan's dependensi. Saya menerima dua kesalahan saat memanggil CoCreateInstance() dari C++ klien. Yang pertama adalah: REGDB_E_CLASSNOTREG Kelas tidak terdaftar Dan coba kedua adalah: 0x80131040 : majelis terletak's manifest definisi tidak cocok majelis referensi.
Jadi memeriksa bahwa anda perakitan's referensi yang hadir. Saya menemukan ini dengan browsing the 1st perakitan dengan dotPeek dan memperhatikan salah satu dari itu's referensi yang hilang. Menempatkan versi yang benar dari ketergantungan dalam folder diselesaikan kedua kesalahan.
Aku berlari ke dalam masalah yang sama menggunakan COM kelas, yaitu 'Kelas tidak terdaftar kecuali' pada saat runtime. Bagi saya, saya mampu menyelesaikan dengan pergi ke aplikasi.file konfigurasi dan mengubah 'startup' dan 'supportedRuntime' elemen untuk sesuatu seperti:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
Anda dapat membaca lebih lanjut tentang rincian di sini [https://stackoverflow.com/questions/1604663/][1]
dan di sini [https://msdn.microsoft.com/en-us/library/w4atty68(v=vs. 110).aspx][1]
[1]: https://msdn.microsoft.com/en-us/library/w4atty68(v=vs. 110).aspx
Saya harus mencatat saya menjalankan Visual Studio 2017. Target cpu = x86 Cantumkan Interop Type = benar (di jendela properti)
Dalam kasus saya kelas itu terdaftar dengan benar dan dibangun di *CPU / 64 bit modus*.
Tapi Aktifkan Aplikasi 32-bit properti Aplikasi IIS renang aplikasi yang menggunakan class ditetapkan untuk Sejati.
Class tidak ditemukan karena arsitektur ketidakcocokan antara kolam renang aplikasi dan konfigurasi yang sebenarnya terdaftar di kelas.
Pengaturan Aktifkan Aplikasi 32-bit untuk Palsu tetap masalah.
Di sini menemukan solusi, menjalankan mmc -32 alat (tidak dcomcfg)
Pada sistem 64 bit dengan 32 bit Office 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