Saya mengembangkan layanan Windows menggunakan C # .NET untuk menghasilkan laporan PDF. Untuk menghasilkan file PDF saya menggunakan dll pihak ketiga. Aplikasi sedang berjalan di platform Windows XP saya. Ketika saya menggunakan layanan di Windows Server 2008 versi 64 bit, saya mendapat kesalahan ini:
Mengambil pabrik kelas COM untuk komponen dengan CLSID {46521B1F-0A5B-4871-A4C2-FD5C9276F4C6} gagal karena kesalahan berikut: 80040154.
Saya mendaftarkan DLL menggunakan perintah regsvr32. Saya dapat melihat CLSID ini di registri. Tapi masalahnya tetap ada.
Apa yang bisa menjadi masalah?
Jawaban:
Dalam VS - properti proyek - di tab Bangun - target platform = X86
sumber
Saya mengalami masalah yang sangat mirip.
Saya perlu menggunakan DLL 32-bit lama dalam Aplikasi Web yang sedang dikembangkan pada mesin 64-bit. Saya mendaftarkan DLL 32-bit ke folder windows \ sysWOW64 menggunakan versi regsrv32 di folder itu.
Panggilan ke DLL pihak ketiga bekerja dari unit test di Visual Studio tetapi gagal dari Aplikasi Web yang di-host di IIS pada mesin yang sama dengan kesalahan 80040154.
Mengubah kumpulan aplikasi ke "Aktifkan Aplikasi 32-Bit" menyelesaikan masalah.
sumber
Kedengarannya seperti layanan Anda dibangun terhadap 'Any CPU', menyebabkan Anda kesalahan pada 64-bit di mana Anda menggunakan komponen COM. Anda perlu membuatnya
x86
.Situs web ini mungkin berjalan sebagai proses 32-bit yang karenanya dapat menggunakan komponen. Membangun solusi Anda melawan
x86
akan memaksa layanan Anda berjalan sebagai 32-bit.sumber
.ocx file (c:\Windows\SysWow>RegSvr32 genX.ocx)
tetapi mendapatkan kesalahan . Modul gagal dimuat. Pastikan biner disimpan di jalur yang ditentukan atau debug untuk memeriksa masalah dengan file .DLL biner atau dependen.Anda tidak perlu mengkonfigurasi target platform properti proyek Anda X86. Anda juga dapat mengonfigurasi opsi iis untuk bekerja dengan x86 seperti itu
sumber
Jika Anda mencari cara untuk membuat ini berfungsi tanpa mengkompilasi ulang aplikasi Any CPU Anda, berikut adalah solusi lain yang potensial:
Saya tidak mengambil kredit untuk solusinya, tetapi itu berhasil bagi kami. Periksa tautan sumber untuk informasi lebih lanjut dan komentar lainnya.
Sumber: https://techtalk.gfi.com/32bit-object-64bit-environment/
sumber
Masalahnya adalah proses server 64 bit dan pustaka 32-bit dan mencoba untuk membuat komponen COM dalam proses yang sama (server in-proc). Entah Anda mengkompilasi ulang server dan membuatnya 32-bit atau Anda membiarkan server tidak berubah dan membuat komponen COM keluar dari proses. Cara termudah untuk membuat server COM keluar dari proses adalah membuat aplikasi COM + - Control Panel -> Administrative Tools -> ComponentServices.
sumber
An error occurred while processing the last operation. [Error code 00690075] The event log may contain additional troubleshooting information.
Saya tidak mengubah pengaturan kompilasi.
Cukup atur "Enable 32-bit Application = True" di AppPool Advanced Settings.
Ini berhasil untuk saya
sumber
Solusi untuk windows 2008 server x64 adalah:
Prosedur ini valid, tidak apa-apa.
sumber
Saya memiliki masalah yang sama, tetapi jawaban yang lain hanya memberikan satu bagian dari solusi.
Solusinya dua kali lipat:
Hapus 64bit dari Registery.
atau
Daftarkan sebagai 32bit:
C:\Windows\SysWOW64\regsvr32 <file.dll>
Mendaftarkannya sebagai 32bit tanpa menghapus pendaftaran 64bit tidak menyelesaikan masalah saya.
sumber
Punya masalah terkait dengan perbaikan yang berbeda, namun serupa:
Saya memiliki proyek layanan Windows yang diatur ke "Any-CPU" menggunakan DLL 64-bit. Pesan kesalahan yang sama. Sudah mencoba banyak hal, tetapi tidak ada yang berhasil. Akhirnya, saya masuk ke proyek Properties -> Build dan perhatikan bahwa proyek telah "Lebih suka 32-bit" diperiksa. Hapus centang ini dan tidak ada lagi kesalahan.
Dugaan saya adalah bahwa layanan windows mengharapkan DLL 32-bit, dan tidak dapat menemukannya.
sumber
Untuk mengubah ke x86:
sumber
Jika Anda menjalankan situs web, Anda juga dapat mencoba mengatur kumpulan aplikasi untuk menonaktifkan Aplikasi 32-bit (di bawah pengaturan lanjutan kumpulan).
sumber
Dalam kasus pribadi saya, masalah telah diperbaiki dengan mencari id kelas di Windows Registry pada mesin pengembang (karena masalah ini dilemparkan ke PC klien). Tindakan ini akan ditempatkan ke dalam komponen COM yang menyebabkan masalah: pustaka x86 yang dirujuk dalam proyek .NET saya yang tidak terdaftar sebagai OCX / COM untuk penginstal atau aplikasi pembaru.
Salam
sumber
Bagi siapa pun yang menggunakan VSTO, masalah bagi saya adalah referensi yang hilang ke
office
perakitan. Itu juga akan muncul jika Anda mencoba untuk instantiate objek VSTO tertentu secara manual.sumber
Saya menemukan bahwa masalah saya terkait dengan pendaftaran DLL yang sebenarnya.
Pertama jalankan "Regedit.exe" dari prompt CMD (saya menaikkan tingkat keamanannya ke Administrator, "untuk berjaga-jaga") kemudian mencari Registry (dengan mengklik "Edit / Temukan" di menu RegEdit atau dengan menekan Ctrl + F) untuk CLSID yang ditampilkan dalam pesan galat yang Anda terima tentang pabrik kelas COM. CLSID saya adalah 29AB7A12-B531-450E-8F7A-EA94C2F3C05F. Ketika kunci ini ditemukan, pilih sub-kunci "InProcServer2" di bawah simpul Hive dan pastikan nama file dari masalah DLL di bingkai Regedit kanan. ditampilkan di bawah "Default". Jika file itu berada di "C: \ Windows \ SysWow64" (seperti C: \ Windows \ SysWow64 \ Redemption.dll "), maka penting bahwa Anda menggunakan file" C: \ Windows \ SysWow64 \ RegSvr32.exe "untuk daftarkan DLL dari baris perintah dan BUKAN default "C: C: \ Windows \ SysWow64 \ RegSvr32.exe c: \ Windows \ SysWow64 \ Redemption.dll tekan enter. Tutup jendela perintah (melalui "Keluar" kemudian Restart komputer Anda (selalu gunakan restart bukan Close Down lalu mulai naik, karena (anehnya) Restart melakukan shutdown menyeluruh dan memuat ulang semuanya sedangkan "Shut Down" dan Power-Up memuat ulang a cache yang tersimpan dari driver dan nilai-nilai lain (yang mungkin salah). Setiap kali Anda mendaftarkan DLL di masa depan, ingatlah untuk menggunakan SysWow64 "RegSvr32.exe" untuk setiap DLL yang disimpan dalam folder C: \ Windows \ SysWow64 dan masalah ini c (jika disebabkan oleh pendaftaran yang salah) seharusnya tidak terjadi lagi.
sumber
Masalah saya adalah bahwa saya salah versi MS Sync FrameWork (1.0) di referensi proyek saya. Setelah memperbarui ke versi 2.1, kesalahan itu hilang dan hidup kembali baik.
sumber
Dalam kasus saya, saya membuat file ms office seperti
word
atauexcel
, saya jalankanWin+R
dan jalankandcomcnfg
, di DCOM Config, selain pilih item nama terkait OFFICE (seperti nama berisiExcel
atauWord
atauOffice
) danOpen the properties, select Identity tab and select the interactive user.
sebagai jawaban ini ,Pesan kesalahan saya muncul
CLSID {000209FF-0000-0000-C000-000000000046}
, jadi saya harus mencoba menemukan CLSID spesifik ini di DCOM Config, dan memang sudah keluar, dan saya memilihnya dan mengikuti langkah yang sama mengaturinteractive user
, kemudian berfungsi.sumber