REGSVR32 Запрос. Модуль & quot; xxxxx.dll & quot; ошибка загрузки

У меня проблема с регистрацией * .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

Нотабене Я установил распространяемые файлы Microsoft Visual C ++ 2010 для x86 и x64.

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

Если бы кто-нибудь мог помочь направить меня в правильном направлении или пролить дополнительный свет на этот вопрос; Я был бы более чем благодарен.

С уважением.

8

Решение

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

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

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

12

Другие решения

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

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

4

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

введите описание изображения здесь

1

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

0

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

0
По вопросам рекламы [email protected]