J'essaie d'enregistrer un fichier COM DLL sur Windows Server 2008 R2. Voici les étapes que j'ai suivies:
cmd
en tant qu'administrateurc:\windows\system32\regsvr32.exe c:\tempdl\temp12.dll
Lorsque j'exécute cette commande, j'obtiens cette erreur:
Le module
temp12.dll
échec du chargement. Assurez-vous que le binaire est stocké sur le chemin spécifié ou lancez-le pour vérifier les problèmes avec le binaire ou le _.DLL
des dossiers. Le module spécifié n'a pas été trouvé.
J'ai pu enregistrer le même fichier DLL sur Windows 2000.
J'ai aussi essayé
c:\windows\syswow64\regsvr32 "c:\tempdl\temp12.dll"
Et j'ai eu cette erreur:
le module
c:\tempdl\temp12.dll
a été chargé mais l'appel àDllRegisterServer
a échoué avec le code d'erreur0x80040154
. Pour plus d'informations sur ce problème, recherchez en ligne en utilisant le code d'erreur comme terme de recherche
C'est l'erreur que vous obtenez lorsque le DLL lui-même nécessite un autre serveur COM à être enregistré en premier ou a une dépendance sur un autre DLL qui n'est pas disponible. Le Regsvr32.exe fait très peu, il appelle LoadLibrary () pour charger le DLL qui est passé dans l'argument de ligne de commande. Puis GetProcAddress () pour trouver le point d'entrée DllRegisterServer () dans la DLL. Et l'appelle laisser au serveur COM le soin de s'enregistrer.
Ce que le code que fait est assez impossible à deviner. Le diagnostic que vous avez obtenu est cependant assez évident du code d'erreur, pour une raison quelconque, ce serveur COM a besoin d'un autre pour être enregistré en premier. Le message d'erreur est nul, il ne vous dit pas quoi autre serveur dont il a besoin. Un triste effet secondaire du fonctionnement de la gestion des erreurs COM.
Pour résoudre ce problème, utilisez l'outil ProcMon de SysInternals. Il vous montre quelles clés de registre Regsvr32.exe (en fait: le serveur COM) s'ouvre pour trouver le serveur. Recherchez les accès à la clé CLSID. Cela vous donne une idée de ce que {guid} recherche. Cela ne vous dit toujours pas tout à fait la DLL du serveur, vous devez comparer la trace avec celle que vous obtenez à partir d'une machine qui fonctionne. La clé InprocServer32 a le chemin DLL.
Vous devrez peut-être enregistrer ceci DLL en utilisant la version 32 bits de regsvr32.exe
:
c:\windows\syswow64\regsvr32 c:\tempdl\temp12.dll
L'erreur 0x80040154 est REGDB_E_CLASSNOTREG de COM, ce qui signifie "Classe non enregistrée". Fondamentalement, une classe COM n'est pas déclarée dans le registre d'installation.
Si vous obtenez cette erreur lorsque vous essayez d'enregistrer une DLL, il se peut que le code d'enregistrement de cette DLL essaie d'instancier une autre Serveur COM (DLL ou EXE) manquant ou non enregistré sur cette installation.
Si vous n'avez pas accès à la source originale DLL, je suggérerais d'utiliser l'outil Process Monitor de SysInternal pour suivre les recherches dans le registre COM (il y en a pour outil RegMon simple mais il peut ne plus fonctionner).
Vous devez mettre un filtre sur le processus de travail (ici: Regsvr32.exe) pour capturer uniquement ce qui est intéressant. Ensuite, vous devez rechercher des requêtes sur HKEY_CLASSES_ROOT\[a progid , une chaîne] qui échouent (avec l'erreur NAME_NOT_FOUND par exemple), ou des requêtes sur HKEY_CLASSES_ROOT\CLSID\[un guid] qui échouent.
PS: Malheureusement, il peut y avoir beaucoup de choses qui semblent échouer sur un système Windows fonctionnant parfaitement, vous devrez donc étudier attentivement toutes les erreurs. Bonne chance :-)
J'ai trouvé un problème similaire lors de l'enregistrement de mon activeX (OCX) dans Windows Server 2008 R2. Pour résoudre ce problème, j'ai utilisé http://www.chestysoft.com/dllregsvr/default.asp tool.There is some problème de dépendance avec mon ocx donc je reçois "Le module temp12.dll n'a pas pu se charger. Assurez-vous que le binaire est stocké au chemin spécifié ou lancez-le pour vérifier les problèmes avec le binaire ou les fichiers .DLL dépendants. Le module spécifié n'a pas pu être trouvé "message d'erreur. Lorsque vous essayez d'enregistrer votre OCX avec cet outil, il affichera un message si l'ocx a une dépendance ou vous obtiendrez un message de réussite.J'ai reçu un message pour la dépendance mfc70.dll et msvcr70.dll.Je colle donc ces dll dans le dossier system32 de C :\windows et c'est fait.Après cela, j'ai enregistré mon ocx avec succès.J'ai utilisé la version 32 bits de l'outil chestysoft (dllregsvr.exe) sur la machine Windows Server 2008 R2 64 bits.
C'est ce qui doit se produire.
Vous devez copier votre DLL que vous souhaitez enregistrer dans: c:\windows\SysWOW64 \
Ensuite, dans la boîte de dialogue Exécuter, saisissez ceci dans: C:\Windows\SysWOW64\regsvr32.exe c:\windows\system32\YourDLL.dll
et vous obtiendrez le message:
DllRegisterServer dans c:\windows\system32\YourDLL.dll a réussi.
Vous avez besoin du chemin complet vers regsvr32 donc% windir $\system32\regsvr32 <*. Dll>
Vous devrez peut-être installer ATL si vos objets COM utilisent ATL, comme décrit dans cet article de la base de connaissances:
http://support.Microsoft.com/kb/201191
Ces bibliothèques devront probablement être fournies par les développeurs pour garantir la bonne version.