CreateInstance Возвращает "Указанный модуль не найден."

Я пытался получить программу, которая работала над Windows 2000 работать на Windows 2003, Все, что я должен был сделать, чтобы заставить программу работать Windows 2003 имеет отношение к неправильной конфигурации. Прямо сейчас этот кусок кода:

chr = pAdapterEnvPtr.CreateInstance(__uuidof(PFADAPTERMNGLib::PFAdapterEnv));

возвращается:

0x8007007E

или другими словами:

The specified module could not be found.

У меня есть две другие программы и еще одна.dll, и я могу успешно создавать экземпляры этих классов. Но это похоже на провал.

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

В OleView, если я пытаюсь создать экземпляр класса, я вижу следующее изображение:

IClassFactory:: CreateInstance не удалось. Указанный модуль не может быть найден. серьезность: SEVERITY_ERROR, объект: FACILITY_WIN32 (8007007E $ http://i52.tinypic.com/344bno0.png

Если вы посмотрите на левую сторону изображения, пытаясь создать экземпляр PFComgMng дает мне ту же ошибку. (PFAdapterEnv а также PFCompMng использовать тот же процесс, PFAdapterMng.exe.) Тем не мение, PFMQMonitor, PFSend, а также PFTrace все работает правильно. (Какой использовать PFMQListen.exe, PFSend.dll, а также PFTraceService.exe.)

Еще одна вещь, которую я хотел отметить, это следующий фрагмент кода:

hr = pPFCompMng.CreateInstance(__uuidof(PFADAPTERMNGLib::PFCompMng));

работает отлично, когда его вызывают раньше PFAdapterMng.exe, Так вроде PFAdapterMng.exe может успешно найти модуль и создать экземпляр, но любые другие процессы, которые пытаются создать один из экземпляров классов внутри PFAdapterMng.exe не могу найти модуль, что приводит к этой ошибке.

поскольку Procmon не помогает в этом конкретном случае, кто-нибудь знает, что я мог бы сделать, чтобы выяснить, что мешает другим процессам найти модуль?

ОБНОВИТЬ:

Я не могу бежать Dependency Walker с профилированием, потому что PFAdapterMng.exe а также PFTraceService.exe должен быть запущен как сервис. Я пытался бежать Dependency Walker во время профилирования OleView и пытался создать экземпляры PFAdapterEnv а также PFCompMng чтобы выяснить, почему я получаю Module not found окно сообщения. К несчастью, Dependency Walker не показал, что ничего не хватает.

UPDATE2:

Может быть, я что-то пропустил в Procmon журнал, поэтому я создал новый журнал, захватывая события прямо перед тем, как перешагнуть вызов CreateInstance и сразу после звонка. Может быть, кто-то еще может взглянуть и сказать мне, если я пропустил это? Я просто не могу найти никаких признаков того, что PFMQListen.exe не мог найти что-то..

Вот ссылка на заархивированную папку с Procmon файл, .csv файл и .xml файл.

http://www.mediafire.com/?07jq8zj7emmpsvd

Update3:

Итак, мне удалось получить Dependency Walker работает в режиме профиля, чтобы создать экземпляр PFAdapterEnv, Dependency Walker не нашли пропавших без вести .dll "S.

Так, Procmon ничего не показывает и не показывает Dependency Walker, Я шел по коду на уровне сборки с ollydbg, и я заметил, что ошибка была создана в функции NdrClientCall2, Я не знаю, означает ли это что-нибудь.

Любые идеи относительно того, что еще я могу попробовать? Нужно ли людям больше информации, чтобы помочь мне решить эту проблему? Если так, пожалуйста, спросите.

UPDATE4:

Я пытался с помощью /RegServer зарегистрировать приложения, и это сработало. Я пытался с помощью /RegServer ранее, где я просто отменил регистрацию всего, используя /UnregServer, На этот раз я также удалил компонент из Component Services что мне нужно было, потому что я хотел бежать PFAdapterMng под другой идентичностью.

Итак, похоже, что все работает при запуске на /RegServer и дважды щелкнув приложения. Однако я бы хотел, чтобы все работало в другой конфигурации.

Как настроить все, чтобы приложения работали следующим образом:

PFAdapterMng.exe - Зарегистрируйтесь как /Service и запустить под другим именем через services.mscPFTraceServer.exe - Зарегистрируйтесь как /Service и запустить под другим именем через services.msc

PFMQListen.exe - Зарегистрируйтесь как /RegServer который будет начат PFAdapterMngPFMQSend.dll - Зарегистрирован с Regsvr32 и загружен PFAdapterMng

Спасибо, Кшиш

1 ответ

Я предполагаю, что это связано с путем поиска некоторых зависимостей DLL исполняемого файла. Вы можете попробовать "Обозреватель зависимостей" на каждом модуле, чтобы увидеть, доступны ли все DLL: http://www.dependencywalker.com/ И обновить PATH поиска, если это необходимо.

Другие вопросы по тегам