マネージド アプリは COM 相互運用を使用しています。残念ながら、COM コンポーネントにはアクセス違反を引き起こすバグがあります。バグが発生すると、アプリ全体がクラッシュし、接続されているハンドラーAppDomain.CurrentDomain.UnhandledException
が実行される機会がありませんでした。AV を処理し、ユーザーにフレンドリーなメッセージを表示して、マネージド アプリを回復する方法があるのだろうか?
質問する
486 次
2 に答える
4
アクセス違反を「処理」する方法はありません。
使用しているコンポーネントとその実装方法によっては、2 番目の AppDomain 内で分離してもプロセスがクラッシュする可能性があります。
問題のあるコンポーネントがある場合は、次のアプローチを使用して、いつでもその使用をより堅牢にすることができます。
そのコンポーネントの使用をラップし、API を公開するプロセス (EXE) を作成します (たとえば、任意の IPC メカニズムを介して)。次に、そのEXEを(メインのEXEから)別のプロセスとして開始して使用できます...特定の時間後にそのコンポーネントを強制終了する必要がある場合、および/または何らかの条件が満たされた場合、いつでもその「ラッパーEXE」を強制終了できますメインEXEから...特定のコンポーネントによっては、その「ラッパーEXE」を強制終了する必要があるときに実行される「ラッパーEXE」内に特別な「クリーンアップコード」を(おそらく別のスレッドで)実装すると便利な場合もあります"。
これを .NET で実装しているため、その「ラッパー EXE」をメインの実行可能ファイルの「埋め込みリソース」として使用し、ファイルシステムに書き込まずに RAM から起動することもできます。
于 2013-05-14T20:53:20.910 に答える