Question

Je suis en train d'enregistrer un fichier DLL COM sur Windows Server 2008 R2. Voici les étapes de mon travail:

  1. Exécuter en tant qu'administrateur cmd
  2. c:\windows\system32\regsvr32.exe c:\tempdl\temp12.dll

Quand j'exécuter cette commande je reçois cette erreur:

  

Le module temp12.dll n'a pas réussi à la charge. Assurez-vous que le binaire est stocké dans le chemin spécifié ou ses débuts pour vérifier les problèmes avec les fichiers binaires .DLL ou dépendants. Impossible de trouver le module spécifié.

j'ai pu enregistrer le même fichier DLL sous Windows 2000.

J'ai aussi essayé

c:\windows\syswow64\regsvr32 "c:\tempdl\temp12.dll"

Et je suis arrivé cette erreur:

  

le module c:\tempdl\temp12.dll a été chargé, mais l'appel à DllRegisterServer échoué avec le code d'erreur 0x80040154. Pour plus d'informations sur ce problème, la recherche en ligne avec le code d'erreur comme le terme de recherche

Était-ce utile?

La solution

C'est l'erreur que vous obtenez lorsque la DLL lui-même nécessite un autre serveur COM à enregistrer d'abord ou a une dépendance à une autre DLL qui est disponible. L'outil Regsvr32.exe fait très peu, il appelle LoadLibrary () pour charger la DLL qui est passé dans l'argument de ligne de commande. Ensuite GetProcAddress () pour trouver le point d'entrée DllRegisterServer () dans la DLL. Et il appelle à laisser au serveur COM pour s'enregistrer.

Qu'est-ce que que code n'est assez unguessable. Le diagnostic que vous avez est cependant assez de soi à partir du code d'erreur, pour une raison quelconque ce serveur COM a besoin d'un autre être enregistré en premier. Le message d'erreur est merdique, il ne vous dit pas ce autre serveur, il a besoin. Un triste effet secondaire de la façon dont fonctionne la gestion des erreurs COM.

Pour résoudre ce problème, utilisez l'outil de ProcMon Sysinternals. Il vous montre ce que les clés de registre Regsvr32.exe (en fait: le serveur COM) ouvre pour trouver le serveur. Recherchez les accès à la clé CLSID. Cela vous donne un indice ce que {guid} il cherche. Cela ne reste pas tout à fait vous dire la DLL du serveur, vous devez comparer la trace avec celui que vous obtenez d'une machine qui fonctionne. La clé de InprocServer32 a le chemin de DLL.

Autres conseils

Vous devrez peut-être enregistrer cette DLL en utilisant la version 32 bits de regsvr32.exe:

c:\windows\syswow64\regsvr32 c:\tempdl\temp12.dll

Erreur 0x80040154 est REGDB_E_CLASSNOTREG de COM, qui signifie « Classe non enregistrés ». Fondamentalement, une classe COM n'est pas déclarée dans le registre de l'installation.

Si vous obtenez cette erreur lorsque vous essayez d'enregistrer une DLL, il est possible que le code d'enregistrement pour cette DLL tente d'instancier une autre serveur COM (DLL ou EXE) qui est manquant ou non inscrit sur cette installation.

Si vous n'avez pas accès à la source de DLL d'origine, je vous suggère d'utiliser de Sysinternals outil de Process Monitor pour suivre COM registre lookups (il utiliser pour être un outil de RegMon plus simple, mais il ne peut pas travailler plus).

Vous devriez mettre un filtre sur le processus de travail (ici: Regsvr32.exe) pour que la capture ce qui est intéressant. Ensuite, vous devez rechercher des requêtes sur HKEY_CLASSES_ROOT \ [ progid , une chaîne] qui échouent (avec erreur NAME_NOT_FOUND par exemple), ou des requêtes sur HKEY_CLASSES_ROOT \ CLSID \ [a guid] qui échouent.

PS: Malheureusement, il peut y avoir beaucoup de chose qui semblent échouer sur un système Windows fonctionne parfaitement, de sorte que vous aurez à étudier toutes les erreurs attentivement. Bonne chance: -)

J'ai trouvé problème similaire lors de l'enregistrement de mon activeX (OCX) dans Windows Server 2008 R2.To résoudre ce i utilisé http://www.chestysoft.com/dllregsvr/default.asp tool.There est un problème de dependance avec mon OCX donc je reçois » le module temp12.dll charge pas. Assurez-vous que le binaire est stocké dans le chemin spécifié ou ses débuts pour vérifier les problèmes avec les fichiers .DLL binaires ou dépendants. le module spécifié est introuvable » message d'erreur. Lorsque vous essayez de votre OCX enregistré avec cet outil, il sera un message rapide si le OCX est d'avoir la dépendance ou vous obtiendrez message.I de succès a un message pour mfc70.dll et Msvcr70.dll dependency.so i coller ces dll dans le dossier system32 de C : \ windows et son done.After que j'inscrire mon OCX sucessfully.I utilisé la version 32 bits de l'outil Chestysoft (de dllregsvr.exe) sur windows server 2008 R2 64 bits la machine.

Vous devrez peut-être installer ATL si votre COM utiliser des objets ATL, tel que décrit par cet article KB:

http://support.microsoft.com/kb/201191

Ces bibliothèques devront probablement être fournis par les développeurs pour assurer la bonne version.

est ce qui doit se produire.

Vous devez copier votre DLL que vous souhaitez enregistrer à: c: \ windows \ SysWOW64 \

Ensuite, dans la boîte de dialogue Exécuter, tapez ceci dans: C:\Windows\SysWOW64\regsvr32.exe c:\windows\system32\YourDLL.dll

et vous obtiendrez le message:

  

DllRegisterServer dans c:. \ Windows \ system32 \ YourDLL.dll réussi

Vous devez spécifier le chemin complet du regsvr32% windir si $ \ system32 \ regsvr32 <*. Dll>

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