2

我一直在尝试获得一个可以运行的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

如果您查看图像的左侧,尝试创建 的实例PFComgMng会给我同样的错误。(PFAdapterEnvPFCompMng使用相同的过程,PFAdapterMng.exe。)但是,,,PFMQMonitorPFSend所有PFTrace工作正常。(其中使用PFMQListen.exePFSend.dllPFTraceService.exe。)

我要注意的另一件事是以下代码:

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

当它从PFAdapterMng.exe. 因此,似乎PFAdapterMng.exe可以成功找到模块并创建实例,但是任何其他尝试创建其中任一类实例的进程PFAdapterMng.exe都找不到该模块,从而导致此错误。

由于Procmon对这种特定情况没有帮助,有谁知道我可以做些什么来弄清楚是什么让其他进程无法找到模块?

更新:

我不能Dependency Walker使用分析运行,因为PFAdapterMng.exe并且PFTraceService.exe必须作为服务运行。我尝试Dependency Walker在分析时运行OleView并尝试创建实例PFAdapterEnvPFCompMng尝试找出我收到Module not found消息框的原因。不幸的是,Dependency Walker并没有表明缺少任何东西。

更新2:

也许我错过了Procmon日志中的某些内容,所以我通过在我跨接呼叫之前和之后立即捕获事件来创建一个新日志CreateInstance。也许其他人可以看看并告诉我我是否错过了它?我根本找不到任何PFMQListen.exe找不到东西的迹象..

这是一个压缩文件夹的链接,其中包含一个Procmon文件、一个.csv文件和一个.xml文件。

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

更新3:

因此,我设法Dependency Walker在 Profile 模式下运行以创建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

谢谢, 克日斯

4

1 回答 1

0

我的猜测是它与可执行文件的某些DLL依赖项的搜索路径有关。您可以在每个模块上尝试“Dependency Walker”以查看是否所有 DLL 都可用: http: //www.dependencywalker.com/ 并在需要时更新搜索 PATH。

于 2011-07-30T08:18:04.043 回答