2010-08-19 19 views
0

J'ai une bibliothèque .NET que je suis en train d'enregistrer pour COM interop. Tout fonctionne bien sur ma machine (Windows 7 x64) - J'inscris la bibliothèque en utilisant regasm et VBScript peut très bien exécuter CreateObject. Je l'annule et CreateObject échoue. Juste comme vous vous y attendriez.Sécurité COM sur Windows Server 2008

Cependant, lorsque je mets exactement la même bibliothèque sur mon serveur (Windows Server 2008 x64) et que j'exécute regasm (qui dit que la bibliothèque a été enregistrée correctement), je ne peux pas réellement utiliser CreateObject de VBScript. Je continue à obtenir une erreur

800A01AD (composant ActiveX ne peut pas créer un objet)

qui est l'erreur exacte que je reçois sur ma boîte locale quand je la bibliothèque de annuler l'enregistrement COM.

La seule chose que je peux trouver est que c'est une question de sécurité. De quoi ai-je besoin pour vérifier vis-à-vis d'une sécurité vi dans COM?

Répondre

2

Il existe deux versions de Regasm.exe sur une machine x64. On dirait que vous avez utilisé la version 32 bits, il ajoute seulement des clés de registre à la vue 32 bits du registre (HKLM \ Software \ Wow6432Node). Pour le faire fonctionner pour le code qui fonctionne en mode 64 bits, vous devrez également l'enregistrer pour le code 64 bits. Et bien sûr, votre composant .NET ne doit pas avoir de dépendances sur le code non géré 32 bits.

La version 64 bits se trouve dans C: \ windows \ microsoft.net \ Framework64

Ou utiliser la version 32 bits du moteur à vbscript.

+0

ma bibliothèque est appelée par une application 32 bits, donc je doute qu'elle utilise la version 64 bits du moteur VBScript ... – hackerhasid

+0

Eh bien, permutez 64 et 32 ​​dans ma réponse. Mais utilisez les deux versions de Regasm avant de le faire. –

1

Pouvez-vous afficher la commande complète que vous utilisez pour enregistrer le fichier .dll?

selon l'article ici: http://www.osmstudios.com/Display.asp?Page=asp_emaildll

vous devez exécuter les commandes suivantes à partir de la ligne de commande:

regasm <location of file from the root> /tlb:<name of DLL>.dll 

gacutil -i <location of file from the root>