2011-03-29 3 views
1

J'ai une application ASP Classic qui référence certains objets COM VB6. L'un de ces objets COM VB6 référence une autre DLL .Net tierce partie.Comment enregistrer 64 bits DLL sans gacutil

La DLL .Net tierce doit être enregistrée sur une machine Windows Server 2008 R2 x64.

J'ai trouvé des scripts pour enregistrer la DLL dans le GAC sans GACUtil en utilisant Powershell (ref: http://weblogs.asp.net/adweigert/archive/2008/10/31/powershell-install-gac-gacutil-for-powershell.aspx)

Maintenant, je dois enregistrer l'assemblée. J'ai utilisé à la fois le GACUTIL et le REGASM sur ma machine de développement local (x86) sans accroc. Mais quand j'essaye d'obtenir la DLL sur le serveur de test j'ai des problèmes.

Première édition: NO GACUtil

Il n'y a pas GACUtil sur le serveur, que je suis autour de script en utilisant indiqué ci-dessus. Je comprends qu'il peut être installé en utilisant le SDK mais je ne veux pas "polluer" l'environnement.

Deuxième question: regasm NE PEUT TROUVER ENSEMBLE

Le regasm sous le 32bit Net Framework ne trouve pas la DLL. Erreur signalée: "RegAsm: erreur RA0000: Impossible de localiser l'assembly d'entrée" C: \ Windows \ System32 \ xxxxx.dll "ou l'une de ses dépendances." J'ai donc utilisé la variante 64 bits de RegAsm et cela a fonctionné. Ma préoccupation est cependant que c'est un faux positif dans le fait que le classique ASP ne trouve pas l'assembly car il n'est pas enregistré par le RegAsm 32 bits.

Je lance mon application J'ai des erreurs dans le journal des événements: "Le composant ActiveX ne peut pas créer d'objet". En règle générale, cela se produit parce qu'il ne peut pas trouver l'objet à créer, ce qui signifie que la DLL hébergeant l'objet n'est pas enregistrée correctement.

Donc ce que j'essaie de faire maintenant est de savoir s'il existe une autre méthode pour REGASM utilisant powershell qui va enregistrer l'assembly dans la portée 32Bit.

Est-ce que quelqu'un sait si c'est possible et quel serait le script pour le faire correctement?

Répondre

1

j'ai découvert que je plaçais le.Net DLL dans le dossier incorrect sur la machine de test pour l'enregistrement.

Sur un système d'exploitation Windows 64 bits, vous disposez des dossiers System32 et SysWOW64. J'ai placé ma DLL dans le dossier System32, où il aurait dû être dans le dossier SysWOW64.

L'erreur que je suis arrivé de RegAsm (« RegAsm: erreur RA0000: Impossible de localiser l'assemblage d'entrée. « C: \ Windows \ System32 \ xxxxx.dll » ou une de ses dépendances ») aurait dû faire me cliquent sur mais je manqué il. Fondamentalement, le RegAsm 32 bits n'a pas pu trouver ma DLL, mais le RegAsm 64 bits a pu trouver mon fichier et en enregistrant l'ensemble avec le 64 bits RegAsm je mettais la DLL dans la portée de 64 bits. J'avais besoin d'être dans la portée 32 bits.

J'ai déplacé la forme DLL System32 vers SysWOW64 et le RegAsm 32 bits a trouvé la DLL et l'a enregistrée dans la portée 32 bits.

Maintenant, mon objet COM VB6 peut trouver la DLL .Net et il fonctionne sans l'erreur "Le composant ActiveX ne peut pas créer d'objet". Avec tout cela, je n'ai pas trouvé une bibliothèque ou une fonction qui fera le même travail que RegAsm sans réellement utiliser RegAsm.

Si quelqu'un trouve cette bête mythique, répondez à cette question. Merci d'avance.

0

Pas sûr, mais votre problème semble provenir d'un effet secondaire de UAC Virtualisation (this article can also help) qui existe à partir de Vista et est toujours valide ici. Une abstrat est que les parties système du système de fichiers et du registre sont maintenant protégées de l'accès utilisateur, mais supposer que les anciens programmes (32 bits) continuent de fonctionner, leur font croire qu'ils écrivent sur ces parties, mais en fait les redirigent vers l'utilisateur. des endroits. Jetez un oeil dans "HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node" dans votre registre. Un problème que j'ai récemment rencontré est que mon MSI a été construit avec une librairie 32 bits, donc l'appel de ces bibliothèques lors de l'installation sur une machine 64 bits fait que la virtualisation UAC installe mes clés de registre dans Wow6432Node. This Internet article m'aide à résoudre le problème. J'utilise Orca pour remplacer Installutillib.dll de 32 à 64 bits.

J'espère que cela aide

JP

+0

Merci pour l'info ... Je regarde maintenant. –

+0

Salut JP, lisez ma réponse pour plus d'informations sur ce que le problème était à la fin. Merci pour votre aide et la lecture intéressante. Certainement gardera à l'esprit la virtualisation UAC. –

Questions connexes