Opracowałem usługę Windows za pomocą C # .NET do generowania raportu PDF. Aby wygenerować plik PDF, korzystam z biblioteki DLL innej firmy. Aplikacja działa na mojej platformie Windows XP. Kiedy wdrożyłem usługę w 64-bitowej wersji systemu Windows Server 2008 , otrzymałem ten błąd:
Pobieranie fabryki klasy COM dla komponentu z CLSID {46521B1F-0A5B-4871-A4C2-FD5C9276F4C6} nie powiodło się z powodu następującego błędu: 80040154.
Zarejestrowałem bibliotekę DLL za pomocą polecenia regsvr32. Widzę ten CLSID w rejestrze. Ale problem utrzymuje się.
Co może być problemem?
Odpowiedzi:
W VS - właściwości projektu - w zakładce Kompilacja - cel platformy = X86
źródło
Natrafiłem na bardzo podobny problem.
Musiałem użyć starej 32-bitowej biblioteki DLL w aplikacji sieci Web rozwijanej na komputerze 64-bitowym. Zarejestrowałem 32-bitową bibliotekę DLL w folderze Windows \ sysWOW64 przy użyciu wersji regsrv32 w tym folderze.
Wywołania do biblioteki DLL innej firmy działały na podstawie testów jednostkowych w Visual Studio, ale nie powiodły się z aplikacji sieci Web hostowanej w IIS na tym samym komputerze z błędem 80040154.
Zmiana puli aplikacji na „Włącz aplikacje 32-bitowe” rozwiązała problem.
źródło
Wygląda na to, że twoja usługa została zbudowana na „Any CPU”, co powoduje błędy w 64-bitowych miejscach, w których używasz komponentów COM. Musisz to zbudować
x86
.Witryna prawdopodobnie działa jako proces 32-bitowy i dlatego może korzystać z tego komponentu. Zbudowanie rozwiązania
x86
wymusi uruchomienie usługi w wersji 32-bitowej.źródło
.ocx file (c:\Windows\SysWow>RegSvr32 genX.ocx)
ale pojawia się błąd Nie można załadować modułu. Upewnij się, że plik binarny jest zapisany pod określoną ścieżką lub debuguj go, aby sprawdzić problemy z plikami binarnymi lub zależnymi .DLL.Nie musisz konfigurować docelowej platformy właściwości projektu X86. Możesz także skonfigurować opcje iis do pracy z taką wersją x86
źródło
Jeśli szukasz sposobu na wykonanie tej pracy bez ponownej kompilacji aplikacji Any CPU, oto inne potencjalne obejście:
Nie biorę uznania za rozwiązanie, ale zadziałało dla nas. Sprawdź link źródłowy, aby uzyskać więcej informacji i inne komentarze.
Źródło: https://techtalk.gfi.com/32bit-object-64bit-environment/
źródło
Problem polega na tym, że proces serwera jest 64-bitowy, a biblioteka 32-bitowa i próbuje utworzyć komponent COM w tym samym procesie (serwer in-proc). Albo przekompilujesz serwer i uczynisz go 32-bitowym, albo pozostawisz serwer niezmieniony i sprawisz, że składnik COM nie będzie przetwarzany. Najłatwiejszym sposobem na wyłączenie serwera COM z procesu jest utworzenie aplikacji COM + - Panel sterowania -> Narzędzia administracyjne -> Usługi Component.
źródło
An error occurred while processing the last operation. [Error code 00690075] The event log may contain additional troubleshooting information.
Nie zmieniłem żadnych ustawień kompilacji.
Wystarczy ustawić „Włącz 32-bitową aplikację = prawda” w Ustawieniach zaawansowanych AppPool.
To zadziałało dla mnie
źródło
Rozwiązaniem dla systemu Windows 2008 Server x64 jest:
Ta procedura jest prawidłowa, jest w porządku.
źródło
Miałem ten sam problem, ale pozostałe odpowiedzi zawierały tylko jedną część rozwiązania.
Rozwiązanie jest dwojakie:
Usuń 64-bitowy z rejestru.
lub
Zarejestruj go jako 32-bitowy:
C:\Windows\SysWOW64\regsvr32 <file.dll>
Zarejestrowanie go jako 32-bitowego bez usunięcia rejestracji 64-bitowej nie rozwiązuje mojego problemu.
źródło
Wystąpił podobny problem z inną, ale podobną poprawką:
Miałem projekt usługi Windows ustawiony na „Any-CPU” przy użyciu 64-bitowej biblioteki DLL. Ten sam komunikat o błędzie. Próbowałem wielu rzeczy, ale nic nie działało. Wreszcie przeszedłem do Właściwości projektu -> Kompiluj i zauważyłem, że w projekcie zaznaczono opcję „Preferuj 32-bit”. Odznaczono to i nie ma już błędu.
Domyślam się, że usługa systemu Windows spodziewała się 32-bitowej biblioteki DLL i nie mogła jej znaleźć.
źródło
Aby zmienić na x86:
źródło
Jeśli prowadzisz witrynę internetową, możesz także spróbować ustawić swoją pulę aplikacji tak, aby wyłączała aplikacje 32-bitowe (w zaawansowanych ustawieniach puli).
źródło
W moim osobistym przypadku problem został rozwiązany podczas wyszukiwania identyfikatora klasy w rejestrze systemu Windows na komputerze programisty (ponieważ problem został zgłoszony na komputerze klienckim). Ta akcja zostanie umieszczona w komponencie COM, który powoduje problem: biblioteka x86, do której odwołuje się mój projekt .NET, która nie została zarejestrowana jako OCX / COM dla aplikacji instalatora lub aktualizacji.
pozdrowienia
źródło
Dla każdego, kto używa VSTO, problemem było dla mnie brakujące odniesienie do
office
zestawu. Pojawiłby się również, gdybyś próbował ręcznie utworzyć instancję niektórych obiektów VSTO.źródło
Odkryłem, że mój problem dotyczył faktycznej rejestracji biblioteki DLL.
Najpierw uruchom „Regedit.exe” z wiersza poleceń CMD (podniosłem poziom zabezpieczeń do Administratora, „na wszelki wypadek”), a następnie przeszukaj Rejestr (klikając „Edytuj / Znajdź” w menu RegEdit lub naciskając Ctrl + F) dla CLSID pokazanego w otrzymanym komunikacie o błędzie dotyczącym fabryki klasy COM. Mój CLSID to 29AB7A12-B531-450E-8F7A-EA94C2F3C05F. Po znalezieniu tego klucza wybierz podklucz „InProcServer2” w tym węźle Hive i sprawdź nazwę pliku problemowego pliku DLL w prawej ramce Regedit. wyświetlana w obszarze „Domyślne”. Jeśli plik ten znajduje się w pliku „C: \ Windows \ SysWow64” (takim jak C: \ Windows \ SysWow64 \ Redemption.dll ”), ważne jest, aby użyć pliku„ C: \ Windows \ SysWow64 \ RegSvr32.exe ”, aby zarejestruj tę bibliotekę DLL z wiersza polecenia, a NIE domyślną „C: C: \ Windows \ SysWow64 \ RegSvr32.exe c: \ Windows \ SysWow64 \ Redemption.dll naciśnij enter. Zamknij okno poleceń (przez „Wyjdź”, a następnie Uruchom ponownie komputer (zawsze używaj restartu zamiast Zamknij w dół, a następnie uruchom, ponieważ (dziwnie) Uruchom ponownie wykonaj dokładne zamknięcie i przeładuj wszystko, podczas gdy „Zamknij” i Power-Up przeładowuje przechowywana pamięć podręczna sterowników i inne wartości (które mogą być wadliwe). Przy każdej rejestracji DLL w przyszłości pamiętaj, aby użyć SysWow64 „RegSvr32.exe” dla dowolnej biblioteki DLL przechowywanej w folderze C: \ Windows \ SysWow64 i ten problem c (jeśli jest to spowodowane nieprawidłową rejestracją) nie powinno się powtórzyć.
źródło
Mój problem polegał na tym, że miałem niewłaściwą wersję MS Sync FrameWork (1.0) w moich referencjach do projektu. Po aktualizacji do wersji 2.1 błąd zniknął i życie znów jest dobre.
źródło
W moim przypadku produkuję plik pakietu MS jak
word
lubexcel
uruchamiamWin+R
i wykonujędcomcnfg
w konfiguracji DCOM, poza tym wybieram element związany z OFFICE (taki jak nazwa zawieraExcel
lubWord
lubOffice
) iOpen the properties, select Identity tab and select the interactive user.
jako odpowiedź ,Mój komunikat o błędzie pokazuje
CLSID {000209FF-0000-0000-C000-000000000046}
, więc muszę spróbować znaleźć ten konkretny CLSID w DCOM Config, i wychodzi, wybieram go i wykonuję ten sam krok, ustawiającinteractive user
, a potem działa.źródło