Regsvr32 и запросов. Модуль " xxxxx.dll " не удалось загрузить

у меня проблема с регистрацией *.dll под Windows 7 x64.

Я попытался разместить *.dll в обоих, C:/Windows/System32 и C:/Windows/SysWOW64 и пытается зарегистрироваться в "regsvr32 xxxxx".dll " в командной строке с повышенными правами. Я также попытался зарегистрировать его из отдельного каталога. Он отвечает со следующей ошибкой:

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.

заметки EventLog:

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

Б. Н. я установил как x86, так и x64 Распространяемые Файлы Microsoft Visual C++ 2010.

интересным является то, что я попытался зарегистрировать то же самое *.dll на моей работе x64 Windows 7 ноутбук и он зарегистрирован, как ожидалось. Я предполагаю, что это склоняется к тому, что какая-то зависимость c++ отсутствует / ATL связана?

С уважением.

5 ответов


это почти наверняка связано с отсутствующей зависимостью. Используйте такой инструмент, как Зависимость Walker чтобы найти необходимые зависимости DLL. Или, если DLL поставляется третьей стороной, прочитайте их документацию, в которой должны быть указаны необходимые зависимости.

отметим, что Microsoft.VC90.ATL указывает версию 9 MSVC, которая является VS2008. Поэтому вам нужно будет установить среду выполнения MSVC 2008 для удовлетворения этой зависимости. Похоже, вы установили среду выполнения MSVC 2010 ошибка.

наконец, пожалуйста, не помещайте файлы в системный каталог. Он принадлежит системе и не должен быть изменен вами.


Зависимая Сборка Microsoft.VC90.ATL, processorArchitecture= "x86"

это указывает на отсутствие модуля среды выполнения Visual C++ (см. библиотеки Visual C++ как общие параллельные сборки). Он доступен как распространяемый установщик (этой предположительно, что вам нужно; x86 variant), который вам нужно установить перед регистрацией вашей DLL (которая, в свою очередь, зависит от отсутствующего компонента).


есть еще одна причина, почему это не удается. Я сам только что столкнулся с этим. я использовал методы API, которые не поддерживали Windows 7, например PathCchRemoveFileSpec который я должен был обновить до старшего,устаревший PathRemoveFileSpec. Я использовал Dependency Walker, чтобы проверить, что это было причиной. Зависимость Уокер немного врет. Если вы посмотрите на мой скриншот (ниже), красный раздел показывает фактическую проблему - методы, которые он не смог решить в DLL, и т. д. - но синий показывает библиотеки DLL, которые на самом деле не являются проблемой вообще (эти библиотеки существуют). Поскольку Dependency Walker настолько стар, он немного лжет (его устаревший, он думает, что что-то недоступно время от времени), но обычно он также говорит правду...вам просто нужно прокрутить немного вниз с верхней левой панели, как я это сделал. Заметка: пожалуйста, прокрутите вниз в следующий раз. В любом случае, однажды я бросил pathcch.h, все работало на 7. Удачи в кодировании.

enter image description here


я получил облегчение от этого сообщения об ошибке. В моем двоичном пути у меня было SPACE. Просто заменил SPACE с UNDERSCORE(_). У меня получилось.


поскольку я также столкнулся с той же проблемой при регистрации x.dll через Regsvr32 одна из возможных причин заключается в том, что x.dll возможно, это неработающая dll. Чтобы использовать несвязанную функцию экспорта dll в коде dot net, вы должны использовать Dllimport.