Desenvolvi um serviço Windows usando C # .NET para gerar relatório em PDF. Para gerar arquivo PDF, estou usando uma DLL de terceiros. O aplicativo está sendo executado na minha plataforma Windows XP. Quando implantei o serviço na versão de 64 bits do Windows Server 2008 , recebi este erro:
A recuperação do factory de classe COM para o componente com CLSID {46521B1F-0A5B-4871-A4C2-FD5C9276F4C6} falhou devido ao seguinte erro: 80040154.
Registrei a DLL usando o comando regsvr32. Eu consigo ver esse CLSID no registro. Mas o problema persiste.
Qual poderia ser o problema?
Respostas:
No VS - propriedades do projeto - na guia Compilar - destino da plataforma = X86
fonte
Corri para um problema muito semelhante.
Eu precisava usar uma DLL de 32 bits antiga em um Aplicativo da Web que estava sendo desenvolvido em uma máquina de 64 bits. Registrei a DLL de 32 bits na pasta windows \ sysWOW64 usando a versão do regsrv32 nessa pasta.
As chamadas para a DLL de terceiros funcionaram a partir de testes de unidade no Visual Studio, mas falharam no Aplicativo Web hospedado no IIS na mesma máquina com o erro 80040154.
Alterar o pool de aplicativos para "Ativar aplicativos de 32 bits" resolveu o problema.
fonte
Parece que seu serviço foi criado com 'Qualquer CPU', causando erros em 64 bits em que você está usando componentes COM. Você precisa construí-lo para
x86
.O site provavelmente está sendo executado como um processo de 32 bits e é por isso que ele pode usar o componente. Construir sua solução
x86
fará com que seu serviço seja executado em 32 bits.fonte
.ocx file (c:\Windows\SysWow>RegSvr32 genX.ocx)
mas estou recebendo erro O módulo falhou ao carregar. Verifique se o binário está armazenado no caminho especificado ou depure-o para verificar problemas nos arquivos .DLL binários ou dependentes.Você não precisa configurar o destino da plataforma de propriedades do projeto X86. Você também pode configurar as opções do iis para trabalhar com x86 assim
fonte
Se você está procurando uma maneira de fazer isso funcionar sem recompilar o aplicativo Any CPU, aqui está outra solução potencial:
Não aceito crédito pela solução, mas funcionou para nós. Verifique o link da fonte para obter mais informações e outros comentários.
Fonte: https://techtalk.gfi.com/32bit-object-64bit-environment/
fonte
O problema é que o processo do servidor é de 64 bits e a biblioteca é de 32 bits e tenta criar o componente COM no mesmo processo (servidor em processo). Você recompila o servidor e o torna em 32 bits ou deixa o servidor inalterado e torna o componente COM fora de processo. A maneira mais fácil de tornar um servidor COM fora de processo é criar um aplicativo COM + - Painel de Controle -> Ferramentas Administrativas -> Serviços de Componentes.
fonte
An error occurred while processing the last operation. [Error code 00690075] The event log may contain additional troubleshooting information.
Não alterei nenhuma configuração de compilação.
Basta definir "Ativar aplicativo de 32 bits = True" nas Configurações avançadas do AppPool.
Funcionou para mim
fonte
A solução para o Windows 2008 Server x64 é:
Este procedimento é válido, está ok.
fonte
Eu tive o mesmo problema, mas as outras respostas forneceram apenas uma parte da solução.
A solução é duas vezes:
Remova os 64 bits do registro.
ou
Registre-o como 32 bits:
C:\Windows\SysWOW64\regsvr32 <file.dll>
Registrá-lo como 32 bits sem remover o registro de 64 bits não resolve meu problema.
fonte
Teve um problema relacionado com uma correção diferente, mas semelhante:
Eu tinha um projeto de serviço do Windows definido como "Qualquer CPU" usando uma DLL de 64 bits. A mesma mensagem de erro. Tentei um monte de coisas, mas nada funcionou. Finalmente, entrei no projeto Propriedades -> Compilar e notei que o projeto tinha "Preferir 32 bits" marcado. Desmarcado e sem mais erros.
Meu palpite é que o serviço Windows esperava uma DLL de 32 bits e não conseguiu encontrá-la.
fonte
Para mudar para x86:
fonte
Se você estiver executando um site, também poderá tentar definir seu pool de aplicativos para desativar os Aplicativos de 32 bits (nas configurações avançadas de um pool).
fonte
No meu caso pessoal, o problema foi corrigido, procurando a identificação da classe no registro do Windows na máquina do desenvolvedor (porque o problema foi lançado em um PC cliente). Esta ação será colocada no componente COM que causa o problema: uma biblioteca x86 mencionada no meu projeto .NET que não estava sendo registrada como OCX / COM para o aplicativo instalador ou atualizador.
Saudações
fonte
Para quem usa o VSTO, o problema para mim era uma referência ausente ao
office
assembly. Também apareceria se você estivesse tentando instanciar certos objetos VSTO manualmente.fonte
Eu descobri que meu problema estava relacionado ao registro real da DLL.
Primeiro execute o "Regedit.exe" em um prompt do CMD (aumentei o nível de segurança para Administrador, "apenas no caso") e, em seguida, procure o Registro (clicando em "Editar / Localizar" no menu RegEdit ou pressionando Ctrl + F) para o CLSID que aparece na mensagem de erro que você recebeu sobre o factory de classe COM. Meu CLSID era 29AB7A12-B531-450E-8F7A-EA94C2F3C05F. Quando essa chave for encontrada, selecione a subchave "InProcServer2" no nó Hive e verifique o nome do arquivo da DLL do problema no quadro Regedit à direita. mostrando em "Padrão". Se esse arquivo residir em "C: \ Windows \ SysWow64" (como C: \ Windows \ SysWow64 \ Redemption.dll "), é importante que você use o arquivo" C: \ Windows \ SysWow64 \ RegSvr32.exe "para registre essa DLL na linha de comando e NÃO o padrão "C: C: \ Windows \ SysWow64 \ RegSvr32.exe c: \ Windows \ SysWow64 \ Redemption.dll, pressione a tecla Enter. Feche a janela de comando (via "Sair" e, em seguida, reinicie o computador (sempre use reiniciar em vez de Fechar e, em seguida, inicie, pois (estranhamente) o Reinício efetua um completo desligamento e recarregamento de tudo, enquanto "Desligar" e o Power-Up recarregam um cache armazenado de drivers e outros valores (que podem estar com defeito.) Sempre que você registrar uma DLL no futuro, lembre-se de usar o SysWow64 "RegSvr32.exe" para qualquer DLL armazenada na pasta C: \ Windows \ SysWow64 e esse problema (se for causado por registro incorreto) não deve ocorrer novamente.
fonte
Meu problema era que eu tinha a versão errada do MS Sync FrameWork (1.0) nas referências do meu projeto. Após a atualização para a versão 2.1, o erro desapareceu e a vida é boa novamente.
fonte
No meu caso, estou produzindo um arquivo do ms office como
word
ouexcel
, executoWin+R
e executodcomcnfg
, no DCOM Config, além de selecionar o item de nome relacionado ao OFFICE (como nome contémExcel
ouWord
ouOffice
) e,Open the properties, select Identity tab and select the interactive user.
como esta resposta ,Minha mensagem de erro é exibida
CLSID {000209FF-0000-0000-C000-000000000046}
, então eu tenho que tentar encontrar esse CLSID específico no DCOM Config, e ele existe, e eu o seleciono e sigo a mesma etapa definidainteractive user
, então funciona.fonte