私の.Net appliactionは、特定のマシン(デスクトップアプリケーション)で突然終了します。私は例外をキャッチしようとしましたが、私が入れたcatch
のステートメントは、起こっていた例外をキャッチできません。.Netアプリケーションが突然終了する
どのように解決するか、この問題を診断するためのアイデアですか?
注:この例外は、使用するデバッガツールがないクライアントマシンのリリースモードでのみ発生します。
注意2:アプリケーションイベントログには何もエラーはありません。
私の.Net appliactionは、特定のマシン(デスクトップアプリケーション)で突然終了します。私は例外をキャッチしようとしましたが、私が入れたcatch
のステートメントは、起こっていた例外をキャッチできません。.Netアプリケーションが突然終了する
どのように解決するか、この問題を診断するためのアイデアですか?
注:この例外は、使用するデバッガツールがないクライアントマシンのリリースモードでのみ発生します。
注意2:アプリケーションイベントログには何もエラーはありません。
System.Windows.Forms.Application.ThreadException and System.AppDomain.CurrentDomain.UnhandledExceptionにイベントハンドラを追加して、アプリケーションの終了を引き起こす例外(存在する場合)があるかどうかを調べることができます。
Visual Studioのデバッグドロップダウンメニューで例外を選択し、スローされたすべてのチェックボックスをオンにします。これは、未処理の例外でアプリケーションを停止する必要があります。それを調べて、結果を教えてください。
.NETランタイムが何かを記録しているときに、クライアントのPCのアプリケーションイベントログを確認できますか?
イベントログを確認しましたが、残念ながらエラーは記録されませんでした。 – Graviton
これは、ほとんどの場合、使用したネイティブコードでWin32例外が発生するCOM/PInvokeの問題が原因です。特定の状況下では、Windowsは、無効なスタックポインタなどの主要な状態の破損時にプロセスを正常に停止するのではなく、単に中止することを選択します。
シャットダウンの前に特定の動作を特定できる場合は、問題を引き起こしている可能性のあるコントロール/ PInvokesの検索を絞り込むことができます。
アプリケーションがPInvokeingで、AnyCPUとしてコンパイルされ、開発マシンが32ビットのウィンドウを実行している場合、64ビットWindowsでアプリケーションを実行するとクラッシュすることがあります。これに対する簡単な修正は、アプリケーションをx86としてコンパイルすることです。 Scott Hanselmanがこれについて投稿しました:http://www.hanselman.com/blog/BackToBasics32bitAnd64bitConfusionAroundX86AndX64AndTheNETFrameworkAndCLR.aspx – Austin
これは当てはまりません。クライアントのマシンではリリースモードでのみ発生するためです。 – Graviton