13

を呼び出すプロセスがありますCreateProcessCreateProcess成功を示すゼロ以外を返すようです。ただし、プロセスへの HANDLE はすぐに設定され、プロセスが終了したことを示します。を呼び出すとGetExitCodeProcessSTATUS_DLL_NOT_FOUNDが返されます。

DLL が見つからないことを理解しています。私はどれが正確かさえ知っています。しかし、私が理解していないのは、プログラムでそれを理解する方法です。

指定された DLL が見つからなかったため、プロセスの開始に失敗したというダイアログが Windows によって表示されることに気付きました (スクリーンショット: http://www.mediafire.com/view/?kd9ddq0e2dlvlb9 )。ダイアログで、Windows は不足している DLL を指定します。ただし、その情報をプログラムで自分で取得する方法はありません。

プロセスの開始に失敗して が返される場合STATUS_DLL_NOT_FOUND、ターゲット プロセスがリンクされていて見つからなかったライブラリ名をプログラムで取得するにはどうすればよいですか? そうすれば、特定のインストールで欠落または破損していると思われる DLL をエラー レポートに自動的に記録できます。

4

5 に答える 5

5

CreateProcess は、成功を示す 0 を返します。

CreateProcess()を返しますBOOL。ここで、0 はFALSE成功ではなく失敗です。

プロセスの開始に失敗し、STATUS_DLL_NOT_FOUND を返す場合、ターゲット プロセスがリンクされていて見つからなかったライブラリ名をプログラムで取得するにはどうすればよいですか?

残念ながら、そのための API はありません。唯一のオプションは、実行可能ファイルのIMPORTSテーブルに手動でアクセスして列挙し、それが使用する DLL を見つけてから、それらのIMPORTSテーブルに再帰的にアクセスして列挙し、見つかったすべての DLL 参照を手動でチェックして、その DLL ファイルが OS の検索パスに存在するかどうかを確認することです。いいえ。

于 2013-08-21T22:42:18.767 に答える