Регистрация DLL-файла в Windows Server 2008 R2

Я пытаюсь зарегистрировать файл com DLL на Windows Server 2008 R2. Вот шаги, которые я предпринял:--9-->

  1. Run cmd в качестве администратора
  2. c:windowssystem32regsvr32.exe c:tempdltemp12.dll

когда я выполняю эту команду, я получаю эту ошибку:

модуль temp12.dll не удалось загрузить. Проверьте, что двоичный файл хранится на указанном пути или дебют, чтобы диагностировать проблемы с этим двоичным файлом или зависимыми .DLL файлы. Указанный модуль не может быть найдено.

я смог зарегистрировать тот же файл DLL в Windows 2000.

я тоже пробовал

c:windowssyswow64regsvr32 "c:tempdltemp12.dll"

и я получил эту ошибку:

модуль c:tempdltemp12.dll был загружен, но вызов DllRegisterServer ошибка с кодом 0x80040154. Для получения дополнительной информации об этой проблеме выполните поиск в интернете, используя код ошибки в качестве условия поиска

8 ответов


Это ошибка, которую вы получаете, когда сама DLL требует, чтобы другой COM-сервер был зарегистрирован первым или имеет зависимость от другой DLL, которая недоступна. К Regsvr32.exe инструмент делает очень мало, он вызывает LoadLibrary () для загрузки DLL, которая передается в аргументе командной строки. Затем GetProcAddress (), чтобы найти точку входа DllRegisterServer () в DLL. И вызывает его, чтобы оставить его до COM-сервера для регистрации.

Что это код делает, это справедливо неопределяемых. Диагностика, которую вы получили, однако, довольно очевидна из кода ошибки, по какой-то причине этот COM-сервер должен быть зарегистрирован первым. Сообщение об ошибке дерьмово, оно не говорит вам что другой, он должен. Печальный побочный эффект того, как работает обработка ошибок COM.

для устранения неполадок используйте инструмент ProcMon SysInternals. Он показывает вам, какие ключи реестра Regsvr32.exe (на самом деле: COM-сервер) открывается, чтобы найти сервер. Искать доступ к ключу CLSID. Это дает вам подсказку, что {guid} он ищет. Это все еще не совсем говорит вам о DLL сервера, вы должны сравнить трассировку с той, которую вы получаете от машины, которая работает. Ключ InprocServer32 имеет путь DLL.


вам может потребоваться зарегистрировать эту DLL, используя 32-разрядную версию regsvr32.exe:

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


ошибка 0x80040154-это REGDB_E_CLASSNOTREG COM, что означает "класс не зарегистрирован". В основном класс COM не объявляется в реестре установки.

Если вы получите эту ошибку при попытке зарегистрировать DLL, возможно, что регистрационный код для этой DLL пытается создать экземпляр другое COM-сервер (DLL или EXE), который отсутствует или не зарегистрирован в этой установке.

Если у вас нет доступа к исходному источнику DLL, я бы предлагаю использовать SysInternal-х Контролировать Процесс инструмент для отслеживания поиска реестра COM (используется более простой инструмент RegMon, но он может больше не работать).

вы должны поставить фильтр на рабочий процесс (здесь: Regsvr32.exe), чтобы захватить только то, что интересно. Тогда вы должны искать запросы на HKEY_CLASSES_ROOT\[a progid, строка], которая терпит неудачу (например, с ошибкой NAME_NOT_FOUND), или запросы на HKEY_CLASSES_ROOT\CLSID\[guid], которые неудача.

PS: к сожалению, может быть много вещей, которые, кажется, терпят неудачу в отлично работающей системе Windows, поэтому вам придется тщательно изучить все ошибки. Удачи :-)


Я нашел аналогичную проблему при регистрации моего activeX (OCX) в windows server 2008 R2.Чтобы решить эту проблему, я использовалhttp://www.chestysoft.com/dllregsvr/default.asp инструмент.Существует некоторая проблема зависимости с моим ocx, поэтому я получаю " модуль temp12.не удалось загрузить dll. Проверьте, что двоичный файл хранится на указанном пути или дебют, чтобы диагностировать проблемы с этим двоичным файлом или зависимыми .DLL-файл. Не удалось найти указанный модуль " сообщение об ошибке. Когда вы пытаетесь зарегистрирован ваш OCX с помощью этого инструмента он предложит сообщение, если ocx имеет зависимость или вы получите сообщение об успехе.Я получил сообщение для mfc70.dll и msvcr70.зависимость dll.поэтому я вставляю эти dll в папку system32 C:\windows и дело сделано.После этого я успешно регистрирую свой ocx.Я использовал 32-битную версию chestysoft tool (dllregsvr.exe) на 64-битной машине windows server 2008 R2.



вам может потребоваться установить ATL, если ваши COM-объекты используют ATL, как описано в этой статье KB:

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

эти библиотеки, вероятно, должны быть предоставлены разработчиками для обеспечения правильной версии.


Это то, что должно произойти.

вам нужно скопировать DLL, которую вы хотите зарегистрировать: \c:\windows\SysWOW64

затем в диалоговом окне "Выполнить" введите это в: C:\Windows\SysWOW64\regsvr32.exe c:\windows\system32\YourDLL.dll

и вы получите сообщение:

DllRegisterServer в c:\windows\system32\YourDLL - ... dll файлы удалось.


вам нужен полный путь к regsvr32, поэтому %windir$\system32\regsvr32