¿Cómo solucionar problemas de registro / uso de un DLL de envoltura COMPABLE COMPLETABLE ?NET?

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

  •  09-12-2019
  •  | 
  •  

Pregunta

He escrito un DLL de envoltura C # .NET COMTORIFICA. Lo firmé con un nombre fuerte y registré la base de código y Typhelib con el 64 bit regasm.exe. El registro y todos los métodos del control son visibles con el oleviewer de 64 bits. Sin embargo, cuando intento usar el control desde 64 bits \ windows \ system32 \ cscript.exe:

  Set logger = CreateObject("MyCompany.LoggerControl")

Esto produce el error:

Error de tiempo de ejecución de Microsoft VBScript: ActiveX Component no se puede crear objeto: 'MyCompany.LoggerControl'

usando procmon de Sysutils para rastrear esto, encuentro:

1: 41: 44.8295486 PM cscript.exe 24028 RegOPenkey HKCR \ MyCompany.LoggerControl
Nombre No encontrado Acceso deseado: Leer

Sin embargo, esta clave existe en regedit. El proceso de llamada se está ejecutando desde un indicador de sistema elevado. Si era un problema de seguridad, ¿no debería el error "Acceso denegado" en lugar de 'nombre no encontrado'?

¿Cuáles son las otras herramientas para rastrear este tipo de error de registro de control COM?

¿Fue útil?

Solución

Aquí hay un par de ideas de solución de problemas:

  1. Identifique el número de error exacto cuando se está devolviendo al intentar crear el objeto:

    en la reanudación de error Siguiente
    Establecer registrador= CreateObject ("MyCompany.LoggerControl")
    Si se equivoca entonces Wscript.echo "Error #" y err.Number Wscript.echo err.description Wscript.quit 1 End IF

  2. Buscar este código de error. Por ejemplo, ¿se "accede denegado" o algún otro error?

  3. Crear un ejecutable C # para llamar a su objeto y ver si puede crearlo con éxito.

  4. Asegúrese de que su DLL no tenga ninguna otra dependencia que le impida cargarse en el directorio que se ejecuta su script. Puede usar depiende.exe desde el directorio que está ejecutando su script o puede usar la técnica de REGSVR32 de mi pobre favorito para intentar cargar la DLL. Si la DLL no se carga debido a una dependencia, recibirá un diálogo de error que le dice que no puede encontrar otra DLL o cargar una de sus dependencias. Si puede cargar el DLL ok, dirá que lo registró con éxito.

    C: \ PATHTOVBS> REGSVR32 C: \ PATHTOYOURDLL \ yourdll.dll

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top