Como solucionar problemas de registro/uso de uma DLL Callable Wrapper do .NET COM?

StackOverflow https://stackoverflow.com//questions/9623307

  •  09-12-2019
  •  | 
  •  

Pergunta

Eu escrevi uma DLL de wrapper chamável em C# .NET Com.Assinei com um StrongName e registrei a base de código e typelib com o regasm.exe de 64 bits.O registro e todos os métodos de controle são visíveis no OleViewer de 64 bits.No entanto, quando tento usar o controle de \Windows\System32\cscript.exe de 64 bits:

  Set logger = CreateObject("MyCompany.LoggerControl")

Isso produz o erro:

Erro de tempo de execução do Microsoft VBScript:O componente ActiveX não pode criar objeto:'MinhaEmpresa.LoggerControl'

Usando o ProcMon da Sysutils para rastrear isso, descubro:

1: 41: 44.8295486 pm CScript.exe 24028 RegopenKey HKCR Mycompany.loggerControl
NOME NÃO ENCONTRADO Acesso desejado:Ler

No entanto, esta chave existe no Regedit.O processo de chamada está sendo executado em um prompt de comando elevado.Se fosse um problema de segurança, o erro não deveria ser 'ACCESS DENIED' em vez de 'NAME NOT FOUND'?

Quais são outras ferramentas para rastrear esse tipo de erro de registro de controle COM?

Foi útil?

Solução

Aqui estão algumas ideias de solução de problemas:

  1. Identifique o número exato do erro retornado ao tentar criar o objeto:

    Em caso de erro, retomar o próximo
    Definir registrador = CreateObject("MyCompany.LoggerControl")
    Se err então wscript.echo "erro #" & err.number wscript.echo err.descripts wscript.quit 1 final se

  2. Procure este código de erro.Por exemplo, é “acesso negado” ou algum outro erro?

  3. Crie um executável C# para chamar seu objeto e veja se ele consegue criá-lo com sucesso.

  4. Certifique-se de que sua DLL não tenha outras dependências que impeçam seu carregamento no diretório em que seu script é executado.Você pode usar depende.exe do diretório em que está executando o script ou pode usar a técnica regsvr32 do meu pobre homem favorito para tentar carregar a DLL.Se a DLL falhar ao carregar devido a uma dependência, você receberá uma caixa de diálogo de erro informando que não é possível encontrar outra DLL ou carregar uma de suas dependências.Se conseguir carregar a DLL ok, ele dirá que a registrou com sucesso.

    C:\PathToVbs>regsvr32 C:\PathToYourDLL\YourDLL.dll

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top