none
COM+ chamando DLL VB.NET - Automation Error RRS feed

  • Pergunta

  •  

             Possuo um sistema (desenvolvido em VB6) que chama um componente feito em VB6, que, por sua vez, chama um método de uma DLL feita em VB.NET. O componente VB6 serve apenas como uma ponte entre sistema e DLL e, também, de filtro de usuários pelo uso de roles.

             Quanto ao componente posso adiantar que:

     

    1. Transaction = NOT SUPPORTED

    2. Security = ENFORCE COMPONENT

     

    Sobre a DLL Vb.NET, que:

     

    1. O usuário do COM+ tem permissão na pasta aonde ela está de leitura/escrita (full control)

    2. O usuário do COM+ tem permissão full control na DLL

    3. Foi dado permissão full ao registro:    

                        HKLM\Software\Microsoft\.NETFramework\Policy\AppPatch\v2.0.50727.00000

    4. A DLL está registrada no servidor de componentes

     

    O COM+ e a DLL estão no mesmo servidor.

              Observo que os testes feitos num servidor de componentes Windows Server 2000 não há qualquer problema, contudo no servidor Windows Server 2003 ocorre a seguinte mensagem no COM+ quando chama a DLL .NET: "Automation Error".

              Apenas como teste coloquei o usuário do componente como administrador do servidor, mas não obtive êxito e o erro, "Automation Error", persistiu.

              Alguém tem alguma idéia do que pode solucionar este problema? Ressalto que o COM+ tem apenas um único método, que chama o método da DLL .NET.

              Obrigado pela ajuda.

     

              UAM

     

    quarta-feira, 14 de novembro de 2007 20:05

Respostas

  • Resolvi o problema da seguinte forma:


    1- Criei um novo projeto do tipo Other Project Types / Setup Project
    2- Selecionei o Projeto abaixo de Solution e cliquei em propriedades
    3- Cliquei em Pré-Requisitos e selecionei "todos os componentes usados no meu projeto" no caso, Crystal Reports for NET Framework 2.0 e Microsoft Data Access Components 2.8 e .NET Framework
    4- Deixei a segunda Opção em Pré-Requisitos marcada "Download prerequisites from the same location as
    my application"
    5- Ao Gerar os builds ele vai colocar todos os arquivos necessários no diretório debug é só copiar e instalar no cliente.

    You need to create and install the prerequisites using your visual studio.net IDE.


    Carlos Lima
    quinta-feira, 28 de maio de 2009 12:37

Todas as Respostas

  • Estou exatamente com o mesmo problema, mas com uma DLL criada em C#, tentando usar ela em VB6,
    inclusive tentei este procedimento, mas sem sucesso: http://forumaccess.com/eve/forums/a/tpc/f/985609831/m/578603931/inc/1


    Se alguém já resolveu ou tem alguma idéia para resolver isto ficarei grato,

    Desde já Obrigado,
    Glaudiston Gomes
    IBM System Specialist
    quarta-feira, 5 de dezembro de 2007 12:32
  • ops...
    consegui resolver...

    é coisa de cache...

    feche o vb6...
    regasm /u nomedadll.dll
    regsvcs /u nomedadll.dll
    gacutil /u nomedadll

    compilie...
    csc /target:library nomedadll.cs AssemblyInfo.cs

    registre:
    gacutil /i nomedadll.dll
    regsvcs nomedadll.dll
    regasm /tlb nomedadll.dll

    agora pode abrir o vb6 q funciona...
    se não funcionar deve ter alguma coisa relacionada com esta dll em c:\windows\assembly .. dá um dir /s q vc acha

    ah... e toda vez q for compilar é bom desregistrar:
    regasm /u nomedadll.dll
    regsvcs /u nomedadll.dll
    gacutil /u nomedadll

    Espero q isto evite que outros apanhem como eu =)

    abs
    Ton

    quarta-feira, 5 de dezembro de 2007 15:25
  • Ola Glaudiston,

    Voce sabe se existe alguma maneira de isto funcionar porem sem o componente COM+, por exemplo:

    pagina ASP(classico) =>(consumindo) componente .NET


    Obrigado(a),
    Everton Molina

                               
    sábado, 8 de dezembro de 2007 15:14
  • Olá Everton,

    Não creio que seja possível porque os componentes .NET são programados usando a CLR, que o ASP não tem acesso nem implementação.

    sábado, 8 de dezembro de 2007 16:34
  • Voce pode fazer componentes .Net visiveis aos COM

    Pra isso no VS voce tem que marcar a opcao Register for COM Interop nas aba Build das propriedades do projeto

    Se quiser ter mais controle, ainda pode marcar com o atributo [ComVisible(true)] e [ComVisible(false)] as classes e membros que deseja expor ou não

    sexta-feira, 14 de dezembro de 2007 01:16
  • Eu consegui resolver fazendo o seguinte:

    comando: RegAsm "XPTO.dll" /codebase

    para remover:

    comando: RegAsm /u "XPTO.dll" /codebase

    cada vez que é feito é necessário reeniciar o VB.


    Espero ter ajudado.
    Cumps,
    TOJR
    quarta-feira, 4 de fevereiro de 2009 15:13
  • meu problema é somente nos clientes, na minha maquina de desenvolvimento funciona direitinho, sabe como resolver isso nos clientes?

    já fiz todos os procedimentos aqui descritos e não funciona ainda, continua dando Automation Error
    Carlos Lima
    sexta-feira, 6 de março de 2009 17:11
  • Estou exatamente com o mesmo problema quando o programa está compilado na maquina de desenvolvimento funciona normalmente

    Porêm ao tentar instalar em outra maquina com o regasm
    São geradas as chaves no regedit mas não funciona


    Estou trabalhando no vb.net


    Alguem tem alguma sugestão?
    quinta-feira, 28 de maio de 2009 12:24
  • Resolvi o problema da seguinte forma:


    1- Criei um novo projeto do tipo Other Project Types / Setup Project
    2- Selecionei o Projeto abaixo de Solution e cliquei em propriedades
    3- Cliquei em Pré-Requisitos e selecionei "todos os componentes usados no meu projeto" no caso, Crystal Reports for NET Framework 2.0 e Microsoft Data Access Components 2.8 e .NET Framework
    4- Deixei a segunda Opção em Pré-Requisitos marcada "Download prerequisites from the same location as
    my application"
    5- Ao Gerar os builds ele vai colocar todos os arquivos necessários no diretório debug é só copiar e instalar no cliente.

    You need to create and install the prerequisites using your visual studio.net IDE.


    Carlos Lima
    quinta-feira, 28 de maio de 2009 12:37
  • Nossa já fiz de tudo e nada de conseguir, ____ com+ :

     

    O cenário é o seguinte:

     

    Tenho uma DLL em C# COM+ que funciona na minha maquina local que é XP e na maquina de mais 3 desenvolvedores q tbm são XP

     

    Mas na hora de colocar no servidor que é

     

    Microsoft Windows Server 2003 R2

    Enterprise Edition

    Service Pack 2

     

    Nada de funcionar, e o pior que as Dlls escritas em VB6 registram e funcionam normalmente mas este lixo.NET não funciona. Se alguém já passou por isso por favor...

    Acreditem não sei mais oque fazer

     

    Tudo q eu faço vem esta droga de msg de erro:

     

    Run-time error '-2146233079 (80131509)':

     

    Automation error

    ---------------------------

    OK  

    ---------------------------

     


    O Programador
    segunda-feira, 12 de abril de 2010 13:54
  • Oi,

    Passei por este mesmo problema hoje resolvi da seguinte forma

    - coloquei o Executavel na mesma pasta da .DDL  (exe feito em vb6.0)  (dll feita em C#)

    - na mesma pasta coloquei o RegAsm.exe 4.0 e executei o comando

      RegAsm.exe SUADLL.dll /tlb:SUADLL.tbl

    neste momento e registrado e criado dentro da pasta uma SUADLL.tbl

    ai vai rodar 100%, porem tem que estar tudo na mesma pasta se nao da erro de automation....

    Luiz.....email: lcppb@hotmail.com se precisar de mais informacoes....


    luiz

    terça-feira, 7 de janeiro de 2014 16:33
  • Funcionou perfeitamente.
    Estou testando o componente CT-e da FlexDocs com carregamento tardio no VB6 [Late Binding] e funcionou perfeitamente.

    Comandos:

    cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
    RegAsm "C:\Program Files\FlexDocs\CTe_Util\v3.08b\CTe_Util.dll" /codebase

    Muito obrigado pela ajuda. Espero que ajude outros devs com isso.

    Alex Rocha,
    Kralen

    quarta-feira, 6 de maio de 2020 19:14