c++ - CreateProcess STATUS_DLL_NOT_FOUND - 哪个 dll?

标签 c++ c windows winapi dll

我有一个调用 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/

相关文章:

mysql - C、SQL Server 和 mysqlclient -- 程序无法使用 mysql_real_connect() 连接到本地数据库

c++ - 自动填写表格并运行程序

c - printf 与 C 中的制表符对齐

windows - 如果错误级别不为零,如何在批处理文件中执行命令?

c# - 为文本 block 加载字符串资源 x :Uid in code behind

c++ - 如何通过 C++ 启动 explorer.exe?

c++ - 如何从特征矩阵映射/构建 C++ vector ?

c++ - 为什么这些条件不适用于模板类型?

c++ - CMake 包含错误(找不到文件, undefined reference )

java - 我想在 Mac OS/Windows 的系统启动时运行我的 Java 程序。我怎样才能做到这一点?