Почему бы REGSVR32 не найти DLL, которая явно там?

8

Я устанавливаю пользовательское приложение на новый Windows 2003 Server. Необходимо добавить и зарегистрировать пару библиотек DLL, и я скопировал их на сервер в папку C: \ WINDOWS \ System32 - именно там они всегда были, когда у нас было приложение, работающее в Windows NT и 2000 ,

Тем не менее, когда я пытаюсь зарегистрировать их с помощью:

regsvr32 c: \ windows \ system32 \ nameoflibrary.dll

Это возвращает:

LoadLibrary("c:\windows\system32\nameoflibrary.dll") failed - 
The specified module could not be found.

DLL, однако, прямо там. Я вижу его. Если я копирую путь в Windows Explorer и пытаюсь его запустить, он говорит мне, что я не могу запустить DLL, поэтому я знаю, что она там есть. Небольшое осложнение заключается в том, что библиотеки DLL были встроены в VB5, но среда выполнения VB5 установлена ​​на сервере, поэтому это не должно быть проблемой.

Любые идеи?

Cyberherbalist
источник
Это 64-битный сервер Windows 2003?
Jscott
Нет, это 32-битная версия
Киберболист

Ответы:

6

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

Джим Б
источник
Ага. Модуль, который должен был быть установлен основным приложением, не был установлен. Как только это было исправлено, две DLL зарегистрированы правильно.
Киберболист
7

Джим Б., наверное, прав. Получите DependencyWalker и загрузите {nameoflibrary.dll} - он покажет вам, какая зависимая DLL отсутствует.

DougN
источник
Обновленный метод заключается в использовании dumpbin.exe из каталога bin Visual Studio:dumpbin /dependents <file.exe/dll>
hLk