Вопрос

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

  1. Бежать cmd как администратор
  2. c:\windows\system32\regsvr32.exe c:\tempdl\temp12.dll

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

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

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

Я также пытался

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

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

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

Это было полезно?

Решение

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

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

Чтобы устранить это, используйте инструмент Sysinternals 'Procmon. Он показывает вам, какие ключи реестра regsvr32.exe (на самом деле: сервер Com) открывается для поиска сервера. Ищите доступ к клавишу CLSID. Это дает вам намек на то, что он ищет. Это до сих пор не совсем сообщает вам сервер DLL, вы должны сравнить трассировку с тем, что вы получаете с машины, которая работает. Ключ Inprocserver32 имеет путь DLL.

Другие советы

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

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

Ошибка 0x80040154 - это com's regdb_e_classnotreg, что означает «класс не зарегистрирован». По сути, класс COM не объявляется в реестре установки.

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

Если у вас нет доступа к исходному источнику DLL, я бы посоветовал использовать Sysinternal's Процесс -монитор Инструмент для отслеживания поисков реестра COM (используется для того, чтобы быть более простым инструментом Regmon, но он может больше не работать).

Вы должны поместить фильтр в рабочее процесс (здесь: regsvr32.exe), чтобы запечатлеть только то, что интересно. Тогда вам следует искать запросы на hkey_classes_root [a прогид, строка], которая не удается (например, с ошибкой name_not_found) или запроса на hkey_classes_root clsid [a Guid], которые терпят неудачу.

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

Я нашел аналогичную проблему, регистрируя свой ActiveX (OCX) в Windows Server 2008 R2. Чтобы решить это, я использовал http://www.chestysoft.com/dllregsvr/default.asp Инструмент. Есть какая -то проблема зависимости с моим OCX, поэтому я получаю «модуль Temp12.dll не удалось загрузить. Убедитесь, что двоичный файл хранится на указанном пути или дебютировал его, чтобы проверить проблемы с двоичными или зависимыми файлами .dll. Указанный модуль не может быть найдено »сообщение об ошибке. Когда вы попытаетесь зарегистрировать свой OCX с помощью этого инструмента, он будет предпринять сообщение, если у OCX зависит или вы получите сообщение успеха. : windows и это сделано. После того, как я успешно зарегистрировал свой OCX. Я использовал 32 -битную версию инструмента Strestysoft (dllregsvr.exe) на Windows Server 2008 R2 64bit Machine.

Вам может потребоваться установить 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 <*. Dll>

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top