我有一个调用 CreateProcess
的进程。 CreateProcess
似乎返回非零值,表示成功。但是,进程的 HANDLE 随后会立即设置,表明进程已退出。当我调用 GetExitCodeProcess
时,返回 STATUS_DLL_NOT_FOUND
。
我知道缺少一个 DLL。我什至确切地知道是哪一个。但是,我不明白的是如何以编程方式解决这个问题。
我注意到 Windows 会显示一个对话框,提示进程启动失败,因为它找不到指定的 DLL(屏幕截图:http://www.mediafire.com/view/?kd9ddq0e2dlvlb9)。在对话框中,Windows 指定缺少哪个 DLL。但是,我自己找不到以编程方式获取该信息的方法。
如果进程启动失败并返回 STATUS_DLL_NOT_FOUND
,我该如何以编程方式检索找不到目标进程链接到的库名称?这样我就可以在错误报告中自动记录在给定安装中似乎丢失或损坏的 DLL。
最佳答案
CreateProcess returns 0 indicating success.
CreateProcess()
返回一个 BOOL
,其中 0 是 FALSE
,即失败而不是成功。
If a process fails to start and would return STATUS_DLL_NOT_FOUND, how do I programmatically retrieve the library name to which the target process was linked which couldn't be found?
不幸的是,没有用于此的 API。您唯一的选择是手动访问和枚举可执行文件的 IMPORTS
表以找出它使用的 DLL,然后递归访问和枚举它们的 IMPORTS
表,手动检查每个 DLL您找到的引用,以查看该 DLL 文件是否存在于操作系统的搜索路径中。
关于c++ - CreateProcess STATUS_DLL_NOT_FOUND - 哪个 dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18366433/