在Windows XP上运行应用程序时出现“无法找到指定的过程”错误(例外c0000139)

时间:2012-01-18 09:51:01

标签: c windows dll

我们有一个dll在Vista和Win7上运行了一段时间,但是在XP上运行时我们得到错误“无法找到指定的程序” {{1}调用它来加载它。

我尝试使用Profile选项运行Dependency Walker,将Global Flags设置为显示加载程序快照,我可以从中获得的唯一看似有用的信息是:

LoadLibrary()

我认为异常LDR: Snapping imports for MyDll.dll from KERNEL32.dll LDR: LdrGetProcedureAddress by NAME - RtlGetLastWin32Error LDR: exception c0000139 thrown within function LdrpSnapIAT Exception record: 0012E490 Context record: 0012E4A4 Context->Eip = 7C9673BE Context->Ebp = 0012E7C0 Context->Esp = 0012E770 LDR: LdrpSnapIAT - caught exception c0000139 snapping thunks (#2) LDR: LdrpWalkImportTable - LdrpSnapIAT #2 failed with status c0000139 是'未找到入口点'。

我们已经注意确保对XP后的API没有任何直接依赖关系(有一些,但这些是c0000139动态加载的)。该dll是在LoadLibrary()WINVER设置为_WIN32_WINNT的情况下构建的。在Dependency Monitor中显示的导出中可以看到库的入口点,并且没有明显缺少的依赖项。同样的应用程序在Vista和Win7中运行得非常好。早期版本的dll在XP上工作正常(由于该组件的性质,很难看出哪些更改导致事情中断)。

编辑:我想到的其他事情我打折了:

  • 安装Visual Studio运行时
  • 来自工作dll的清单文件和不相同的清单文件

还有什么明显的我遗失了吗?

1 个答案:

答案 0 :(得分:4)

我不知道这是否会对你有所帮助,但我今天遇到了与装载机快照完全相同的问题。事实证明我的问题在depends.exe中可见,但我不知道dll是粉红色的重要性......我只是诊断出了依赖的导出问题,而不是导入问题。

我的问题是我使用的是“RegGetValue”,只能在Vista +上使用。不幸的是,如果您在Windows XP上使用仅Vista的API,则没有正确的错误报告。取决于在导入部分中显示如下:

enter image description here

我注意到你的问题是使用Kernel32.dll而不是Advapi.dll所以检查导入是否依赖...