それ自体の中にいくつかのスレッドを生成するdllをロードしています。時々、プログラムは未処理の例外でクラッシュします。例外が別々のスレッドでスローされているため、すべてのライブラリ呼び出しをtry / catchステートメントでラップできません。また、不正なエラー処理をデバッグ/修正するためのライブラリのソースにアクセスできません。これらの例外が発生したときにプログラムが他のことを続けてほしいのですが、これらの例外を処理するための適切な方法はありますか?または、グローバルキャッチオール例外メソッドを実行するために私ができる唯一のことはありますか?
質問する
456 次
2 に答える
1
DLLを別のアプリドメインにロードすると、で生成された例外を分離できるはずですAppDomain.UnhandledException
が、これは絶対確実ではなく、プロセスも削除されて何も起こらない特定の状況があることに注意してください。それについて行うことができます(スタックオーバーフロー、メモリ不足など)。
その場合にできる最善の方法は、ある種のdll通信ハーネスを使用して別のプロセスに完全にロードし、何らかの形式のリモート処理を使用してそのプロセスと通信することです。
于 2013-02-15T20:29:08.153 に答える
1
アプリケーションが起動し、次に DLL をロードする別のプロセス (EXE) を実装することをお勧めします。
これにより、必要なときにいつでもプロセスを強制終了/再起動できます...
通信方法に関するいくつかのオプションが表示されます。たとえば、次のとおりです。
- COMを使用できます(アウトプロセスCOMサーバーとして実装する場合)
- 共有メモリを使用できます (非常に高いパフォーマンスです。ウォークスルーについてはこちらを、.NET 2 ラッパーについてはこちらを参照してください) 。
メソッドが複数の Windows バージョンと互換性がある必要がある場合は、IPC に「ネットワーク」を使用することは控えます (デスクトップ ファイアウォールが付属しているものもあります)。
于 2013-02-15T20:36:02.183 に答える