【发布时间】:2011-10-16 08:38:20
【问题描述】:
我一直在尝试让一个在Windows 2000 上运行的程序在Windows 2003 上运行。到目前为止,为了让程序在Windows 2003 上运行,我所做的一切都与不正确的配置有关。现在,这段代码:
chr = pAdapterEnvPtr.CreateInstance(__uuidof(PFADAPTERMNGLib::PFAdapterEnv));
正在返回:
0x8007007E
或者换句话说:
The specified module could not be found.
我有两个其他程序和另一个 .dll,我可以成功创建这些类的实例。但这似乎失败了。
我使用Procmon 试图找出程序找不到什么,但Procmon 没有显示任何可能表明程序找不到的东西。
在OleView 中,如果我尝试创建类的实例,我会看到以下图像:
如果您查看图像的左侧,尝试创建 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 必须作为服务运行。我尝试在分析OleView 时运行Dependency Walker,并尝试创建PFAdapterEnv 和PFCompMng 的实例,以尝试找出我收到Module not found 消息框的原因。不幸的是,Dependency Walker 并没有表明缺少任何东西。
更新2:
也许我错过了Procmon 日志中的某些内容,因此我通过在接听CreateInstance 之前和之后立即捕获事件创建了一个新日志。也许其他人可以看看并告诉我我是否错过了它?我根本找不到任何迹象表明PFMQListen.exe 找不到东西..
这是一个压缩文件夹的链接,其中包含一个Procmon 文件、一个.csv 文件和一个.xml 文件。
http://www.mediafire.com/?07jq8zj7emmpsvd
更新3:
所以,我设法让Dependency Walker 在配置文件模式下运行以创建PFAdapterEnv 的实例。 Dependency Walker 没有找到任何丢失的.dll。
所以,Procmon 没有显示任何内容,Dependency Walker 也没有。我正在使用ollydbg 在汇编级别逐步执行代码,我注意到错误是在函数NdrClientCall2 中创建的。我不知道这是否意味着什么。
关于我还可以尝试什么的任何想法?人们是否需要更多信息来帮助我解决这个问题?如果有,请询问。
更新4:
我尝试使用/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 加载
谢谢, 克日斯
【问题讨论】:
-
ProcMon 肯定会帮助您找到丢失的 DLL,您会看到程序正在搜索它。大海捞针确实需要一些努力。
-
PFMQListen.exe是调用CreateInstance并收到错误的进程,但Procmon没有显示任何表明PFMQListen.exe缺少某些内容的内容。我将使用Procmon日志更新我的问题,因此也许其他人可能会发现我缺少的东西。
标签: c++ com windows-server-2003 com+ createinstance