Bisakah Anda memberikan lebih banyak detail dengan beberapa kode?
Xaisoft
10
Ada dua pertanyaan: 1. Apakah Anda menginstal / mendaftarkan komponen COM pada mesin Windows 7 x64? 2.Apa platform target aplikasi Anda, saya pikir Anda harus mengatur platform ke x86, tolong jangan setel sebagai "CPU Apa Pun"? Silakan daftarkan COM terlebih dahulu dan kemudian jalankan untuk menguji aplikasi, silakan merujuk ke dokumen: support.microsoft.com/kb/146219 dan Penjelasan penggunaan Regsvr32 dan pesan kesalahan
Sepertinya program atau proses mana pun yang Anda coba inisialisasi tidak diinstal di komputer Anda, memiliki penginstalan yang rusak, atau perlu didaftarkan.
Pikirkan yang Anda maksud RegSvr32.exe (sebagai lawan RegSrv32.exe).
windowsgm
60
Anda perlu memastikan semua rakitan Anda dikompilasi untuk arsitektur yang benar. Coba ubah arsitektur untuk x86 jika menginstal ulang komponen COM tidak berhasil.
Ini memecahkan proses saya tidak menemukan Klien NAV 2009 R2 (ClassID 50000004-0000-1000-0001-0000836BD2D2).
Vincent Vancalbergh
14
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.
Harap jangan memposting jawaban yang identik untuk beberapa pertanyaan. Posting satu jawaban bagus, lalu pilih / tandai untuk menutup pertanyaan lain sebagai duplikat. Jika pertanyaannya bukan duplikat, sesuaikan jawaban Anda dengan pertanyaan tersebut .
kleopatra
10
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.
Ya, jika misalnya Anda mencoba membuat DesktopWallpapermenggunakan CLSCTX_INPROC(bukan CLSCTX_ALL) Anda akan mendapatkan 0x80040154 (REGDB_E_CLASSNOTREG)kesalahan.
pengguna362515
9
Jika Anda menggunakan komponen COM 64-bit dalam aplikasi web di IIS, pastikan pool aplikasi diatur untuk tidak mengizinkan aplikasi 32 bit ( Aktifkan Aplikasi 32-Bit: salah dalam pengaturan lanjutan)
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.
Sama untuk ku. Sebuah dll 32bit digunakan pada mesin dev 64bit, pengujian 64bit dan server live 64 bit. Bekerja dengan baik di kotak dev. Ketika diterapkan ke pengujian dan server langsung, itu gagal hingga aplikasi 32-bit diizinkan di masing-masing IIS App Pools dan pool dimulai ulang. Saya juga harus mematikan "Sematkan Jenis Interop" (pengaturan pada dll menyinggung di VS) dan mengatur "Salin Lokal" = true untuk memastikan dll benar-benar disalin dalam bentuk aslinya ke server.
cymorg
3
Dengan mendaftarkan kelas (khususnya CLSID-nya) - lihat misalnya di sini .
Saya memiliki masalah yang sama saat menggunakan MapWinGis. Saya menemukan solusinya, bekerja pada visual studio 2015 windows forms proyect, cukup klik kanan pada proyect-> properties-> Build, setel konfigurasi ke All configuration dan di conbobox "platform target" atur ke x64.
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:
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.
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.
sumber
Anda perlu memastikan semua rakitan Anda dikompilasi untuk arsitektur yang benar. Coba ubah arsitektur untuk x86 jika menginstal ulang komponen COM tidak berhasil.
sumber
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.
sumber
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.
sumber
DesktopWallpaper
menggunakanCLSCTX_INPROC
(bukanCLSCTX_ALL
) Anda akan mendapatkan0x80040154 (REGDB_E_CLASSNOTREG)
kesalahan.Jika Anda menggunakan komponen COM 64-bit dalam aplikasi web di IIS, pastikan pool aplikasi diatur untuk tidak mengizinkan aplikasi 32 bit ( Aktifkan Aplikasi 32-Bit: salah dalam pengaturan lanjutan)
sumber
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.
sumber
Dengan mendaftarkan kelas (khususnya CLSID-nya) - lihat misalnya di sini .
sumber
dalam kasus saya
my platform
adalah x64the Dll library(sdk)
danredistributable package
adalah x64begitu
di penelusur solusi
navigate to your project
Buka
Properties
change the Platform target from AnyCPU to x64
sumber
Cara saya menyelesaikan masalah ini adalah dengan mendaftarkan
COM
melaluiregsvr32
.pastikan bahwa COM yang Anda panggil terdaftar.
Aplikasi saya sedang menggunakan
xceedcry.dll
dan saya tidak mendaftarkannya. Setelah saya mendaftarkannya, aplikasi berfungsi dengan baik.sumber
Solusi saya adalah mengubah " Aktifkan Aplikasi 32-Bit " ke True dalam pengaturan lanjutan dari kumpulan aplikasi relatif di IIS.
sumber
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.
sumber
Bagi saya, saya harus membuat konfigurasi build 64 bit.
sumber
Saya memiliki masalah yang sama saat menggunakan MapWinGis. Saya menemukan solusinya, bekerja pada visual studio 2015 windows forms proyect, cukup klik kanan pada proyect-> properties-> Build, setel konfigurasi ke All configuration dan di conbobox "platform target" atur ke x64.
sumber
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.
sumber
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.
sumber
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)
sumber
Buka direktori .NET framework dan daftarkan dll masing-masing dengan jalur dll spasi putih Regsvr32.exe .
sumber
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
sumber
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
sumber