web-dev-qa-db-fra.com

REGSVR32: le module "xxxxx.dll" n'a pas pu être chargé ... l'assembly dépendant est introuvable

J'ai un problème en ce qui concerne l'enregistrement d'un fichier * .dll sous Windows 7 x64. 

J'ai essayé de placer le fichier * .dll dans C:/Windows/System32 et C:/Windows/SysWOW64 et d'essayer de vous enregistrer avec "regsvr32 xxxxx.dll" sous une invite de commande élevée. J'ai aussi essayé de l'enregistrer à partir d'un répertoire séparé. Il répond avec l'erreur suivante:

The module "xxxxx.dll" failed to load.
Make sure the binary is stored at the specified path or debug it to check for problems with the binary or dependent .DLL files.
The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail.

The EventLog note:

Activation context generation failed for "C:\(path-to-dll)
Dependent Assembly
Microsoft.VC90.ATL,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" could not be found.
Please use sxstrace.exe for detailed diagnosis

N.B. J'ai installé les redistribuables Microsoft Visual C++ 2010 x86 et x64.

Un point intéressant est que j'ai essayé d'enregistrer le même * .dll sur mon ordinateur portable x64 de travail et que celui-ci s'est enregistré comme prévu. Je suppose que cela penche vers le fait qu’une sorte de dépendance C++ est manquante/liée à ATL?

Si quelqu'un pouvait m'aider à me diriger dans la bonne direction ou à apporter des éclaircissements supplémentaires à ce sujet; je serais plus que reconnaissant.

Cordialement.

8
Alfie J. Palmer

Ceci est presque certainement dû à une dépendance manquante. Utilisez un outil tel que Dependency Walker pour rechercher les dépendances requises de la DLL. Ou, si la DLL est fournie par un tiers, lisez sa documentation, qui doit spécifier les dépendances requises.

Notez que Microsoft.VC90.ATL indique la version 9 de MSVC, à savoir VS2008. Vous devez donc installer le runtime MSVC 2008 pour répondre à cette dépendance. Il semble que vous ayez installé le runtime MSVC 2010 par erreur.

Enfin, veuillez ne pas mettre de fichiers dans le répertoire système. Il appartient au système et ne doit pas être modifié par vous. 

13
David Heffernan

Assemblée dépendante Microsoft.VC90.ATL, processorArchitecture = "x86"

Cela indique un module d'exécution Visual C++ manquant (voir Bibliothèques Visual C++ en tant qu'assemblages côte à côte partagés ). Il est disponible en tant qu’installateur redistribuable ( this est probablement celui dont vous avez besoin; variante x86), que vous devez installer avant d’enregistrer votre DLL (elle-même dépend du composant manquant).

4
Roman R.

Il y a aussi une autre raison pour laquelle cela échoue. Je viens de tomber sur moi-même. J'utilisais des méthodes API qui ne prenaient pas en charge Windows 7, tel que PathCchRemoveFileSpec que je devais mettre à jour à l'ancien, deprecated PathRemoveFileSpec . J'ai utilisé Dependency Walker pour vérifier si c'était la cause. Dependency Walker ment un peu. Si vous regardez ma capture d'écran (ci-dessous), la section rouge montre le problème réel - les méthodes qu'il n'a pas pu résoudre dans les DLL dont il dispose, etc. - mais le bleu indique les DLL qui ne sont en réalité pas du tout le problème Les DLL existent). Puisque Dependency Walker est si vieux, il ment un peu (son obsolète, il pense que quelque chose n’est pas disponible de temps en temps), mais habituellement, il dit aussi la vérité ... il suffit de faire défiler un peu en partant volet gauche comme je l'ai fait. Note à moi-même: s'il vous plaît faites défiler la prochaine fois. Quoi qu'il en soit, une fois que j'ai abandonné pathcch.h, tout a fonctionné sur 7. Bon codage.

 enter image description here

1
Alexandru

comme j'ai également été confronté au même problème lors de l'enregistrement du fichier x.dll via Regsvr32, l'une des raisons possibles est que x.dll est peut-être un fichier non maged .ll. devez utiliser Dllimport.

0
Ayush joshi

J'ai été soulagé de ce message d'erreur. Dans mon chemin binaire, j'avais une SPACE. Vient de remplacer la SPACE par UNDERSCORE(_). Cela a fonctionné pour moi.

0