Я пытался заставить программу, работающую на 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
.
Итак, 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
Спасибо, Krzys