2017-03-10 10 views
0

私はC#アプリケーションをVisual Studio 2015で実行しています。任意の実行可能ファイルを受け入れ、実行するコマンドプロンプトを開きます。これらの実行可能ファイルについては何も保証されていないため、実行に失敗し、「xxx.dllを見つけることができませんでした」などのシステムエラーが発生する可能性があります。特定の例については、hereを参照してください。これらのシステムエラー(ウィンドウのヘッダーに「XXXXX.exe - システムエラー」と表示されることがあります)は、子プロセスの終了をブロックし、親プロセスが子プロセスを待機しているため、親プロセスもブロックします。人間がそのボタンを押して、子プロセスを終了させ、親プロセスを続行できるようになるまでブロックします。私は人間の介入なしに、自動的にこれらのエラーが最初に現れないようにすることによって自動的に発生する必要があります。オンラインで見ると、regeditを使用してWindowsエラー報告を無効にすることができました。これは「XXXXX.exeが動作を停止しました」などのエラーは無視しますが、リンクされたシステムエラーなどのシステムエラーは無視されません。このようなエラーを無視するにはどうすればよいですか?Windows上の子プロセスからシステムエラーをブロックする方法

答えて

0

リンクされたエラーメッセージには、名前の代わりに関数が(プログラムがdllの異なるバージョンである場合によく発生する)IDでロードされたDLLインポートの失敗が示されます。私はこのメッセージが最初に現れないようにする方法を知らない。

しかし、子実行ファイルがまだ実行中(このダイアログボックスを表示)であるため、このウィンドウを見つけてコードから閉じることができます。

親プロセスが子プロセスIDを知っている必要があるので、これは非常に簡単です。そこからFindWindowExまたはEnumWindowsを使用して適切なウィンドウクラス名を指定してダイアログハンドルを取得し、CloseWindowを使用してそのハンドルを閉じることができます。

注:これらの機能を使用するには、P/Invokeを使用する必要があります。

もっとも洗練されたソリューションではないかもしれませんが、間違いなく機能します。

関連する問題