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.msc
PFTraceServer.exe
- Зарегистрируйтесь как /Service
и запустить под другим именем через services.msc
PFMQListen.exe
- Зарегистрируйтесь как /RegServer
который будет начат PFAdapterMng
PFMQSend.dll
- Зарегистрирован с Regsvr32
и загружен PFAdapterMng
Спасибо, Кшиш
1 ответ
Я предполагаю, что это связано с путем поиска некоторых зависимостей DLL исполняемого файла. Вы можете попробовать "Обозреватель зависимостей" на каждом модуле, чтобы увидеть, доступны ли все DLL: http://www.dependencywalker.com/ И обновить PATH поиска, если это необходимо.