Comment résoudre l'enregistrement / Utilisation d'une dll d'enveloppe appelable .NET COM?

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

  •  09-12-2019
  •  | 
  •  

Question

J'ai écrit une dll d'enveloppe appelable C # .NET COM. Je l'ai signé avec un nom fort et enregistré le codebase et la typelib avec le Regash.exe 64 bits. L'enregistrement et toutes les méthodes du contrôle sont visibles avec l'olviewer 64 bits. Cependant, lorsque j'essaie d'utiliser la commande à partir de 64 bits \ windows \ system32 \ cscript.exe:

  Set logger = CreateObject("MyCompany.LoggerControl")

Ceci produit l'erreur:

Erreur d'exécution Microsoft VBScript: Composant ActiveX Impossible de créer un objet: 'myCompany.loggercontrol'

Utiliser Procmon à partir de Sysutils pour suivre cela, je trouve:

1: 41: 44.8295486 PM cscript.exe 24028 regopenkey hkcr \ mycompany.loggercontrol
Nom non trouvé Accès souhaité: Lire

Cependant, cette clé existe en Regedit. Le processus d'appel est en cours d'une invite de commande élevée. Si c'était un problème de sécurité, l'erreur ne devrait-elle pas être «accès refusé» au lieu de «nom non trouvé»?

Quels sont les autres outils pour suivre ce type d'erreur d'enregistrement de contrôle COM?

Était-ce utile?

La solution

Voici quelques idées de dépannage:

  1. Identifiez le numéro d'erreur exact étant renvoyé lors de la tentative de création de l'objet:

    sur erreur CV Suivant

    Set Logger= CreateObject ("myCompany.loggercontrol")
    Si erreur alors Wscript.echo "Erreur #" & err.Number Wscript.echo err.description Wscript.quit 1 Fin si

  2. Recherchez ce code d'erreur. Par exemple, est-ce "accès refusé" ou une autre erreur?

  3. Créez un exécutable C # pour appeler votre objet et voir s'il peut le créer successivement.

  4. Assurez-vous que votre DLL n'a pas d'autres dépendances qui l'empêchent d'être chargées dans le répertoire de votre script. Vous pouvez utiliser Depends.exe à partir du répertoire Vous exécutez votre script de ou vous pouvez utiliser la technique de My Poor Poor Man's of REGSVR32 pour essayer de charger la DLL. Si la DLL ne parvient pas à la charge due à une dépendance, vous obtiendrez une boîte de dialogue d'erreur vous indiquant qu'il ne peut pas trouver une autre DLL ou charger une de ses dépendances. Si cela peut charger la DLL ok, il le dira que cela l'inscrit avec succès.

    c: \ pathtoVbs> regsvr32 c: \ pathtoyourdll \ yourdll.dll

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top