Подтвердить что ты не робот

Зарегистрировать DLL файл в Windows Server 2008 R2

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

  • Запустите cmd как администратор
  • 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. Для получения дополнительной информации об этой проблеме выполните поиск в Интернете с помощью кода ошибки в качестве поискового запроса

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

Вы должны скопировать свою DLL, которую хотите зарегистрировать, чтобы: C:\Windows\SysWOW64\

Затем в диалоговом окне "Запуск" введите следующее: C:\Windows\SysWOW64\regsvr32.exe c:\windows\system32\YourDLL.dll

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

DllRegisterServer в c:\windows\system32\YourDLL.dll преуспел.

Ответ 8

Вам нужен полный путь к regsvr32, поэтому% windir $\ system32\regsvr32 < *. dll >