Come risolvere i problemi di registrazione / utilizzo di A .NET Com Calleble Wrapper DLL?

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

  •  09-12-2019
  •  | 
  •  

Domanda

Ho scritto una DLL COMBERPER COMBALICALE C # .NET COM. L'ho firmato con un nome di forza e registrato il codice di codici e typlib con il regasm.exe a 64 bit. La registrazione e tutti i metodi del controllo sono visibili con l'oleviewer a 64 bit. Tuttavia, quando provo a utilizzare il controllo da 64 bit \ windows \ system32 \ cscript.exe:

  Set logger = CreateObject("MyCompany.LoggerControl")
.

Questo produce l'errore:

.

Errore di runtime Microsoft VBScript: ActiveX Component non può creare oggetto: "mycompany.loggercontrol '

Uso di Procmon da Sysutils per tracciarlo giù, trovo:

.

1: 41: 44.8295486 PM cscript.exe 24028 regopenkey hkcr \ mycompany.loggercontrol
Nome non trovato Accesso desiderato: Leggi

Tuttavia, questa chiave esiste in regedit. Il processo di chiamata è in esecuzione da un prompt dei comandi elevato. Se fosse un problema di sicurezza, non dovrebbe l'errore essere "accesso negato" invece di "nome non trovato"?

Quali sono gli altri strumenti per rintracciare questo tipo di errore di registrazione del controllo COM?

È stato utile?

Soluzione

Ecco un paio di idee per la risoluzione dei problemi:

    .
  1. Identifica il numero di errore esatto restituito quando si tenta di creare l'oggetto:

    On Error Resume Avanti
    Set Logger= creatoObject ("mycompany.loggercontrol")
    Se errato, allora Wscript.echo "errore #" & err.number Wscript.echo err.description. Wscript.quit 1. Fine se

  2. guarda questo codice di errore. Ad esempio, è "Accesso negato" o qualche altro errore?

  3. Crea un eseguibile C # per chiamare il tuo oggetto e vedere se può crearlo con successo.

  4. Assicurati che la DLL non abbia altre dipendenze che impediscono che venga caricato nella directory è eseguito la tua script. È possibile utilizzare dipende.exe dalla directory da cui stai eseguendo il tuo script o è possibile utilizzare la mia tecnica preferita di un povero di regsvr32 per cercare di caricare la DLL. Se la DLL non riesce a caricare a causa di una dipendenza otterrai una finestra di dialogo di errore che ti dice che non riesce a trovare un'altra DLL o caricare una delle sue dipendenze. Se può caricare la DLL OK, lo dirà registrato con successo.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top