ユーザーが次のようなエラーを報告するたび
System.Runtime.InteropServices.SEHException-外部コンポーネントが例外をスローしましたか?
プログラマとして私が原因を特定するためにできることはありますか?
シナリオ:1人のユーザー(私の会社が作成したプログラムを使用)がこのエラーを報告しました。これは1回限りのエラーである場合とそうでない場合があります。彼らは、先月、コンピューターが2回「動作を停止した」と述べました。これは通常、コンピューターに関連する誰かが期待どおりに機能していないことを意味するため、この説明を文字通りに受け取らないように、経験から学んだ。彼らは私に詳細を与えることができず、ログに記録されたエラーを見つけることができませんでした。したがって、このエラーである場合とそうでない場合があります。
スタックトレースから、実際のエラーは、相互運用コードを直接呼び出さないクラスを構築するときに発生しましたが、DevExpressグリッドにデータバインドされたリストの一部である可能性があるため、おそらく複雑です。
エラーは、通常はプログラムを終了する未処理の例外ルーチンによって「キャッチ」されましたが、無視して続行するオプションがあります。エラーを無視することを選択した場合、プログラムは引き続き動作しますが、このルーチンを次に実行したときにエラーが再発しました。ただし、アプリケーションを閉じて再起動した後は再び発生しませんでした。
問題のコンピューターはストレスを受けていないようでした。 Vista Businessを実行しており、2GBのメモリを搭載しています。タスクマネージャーによると、アプリケーションの約半分のみを使用しており、約200MBしか使用していません。
関連する場合とそうでない場合がある情報が1つあります。同じプログラムの別のセクションでは、ネイティブDLLのドットネットラッパーであるサードパーティコンポーネントを使用していますが、このコンポーネントには既知の問題があり、非常にまれに、
保護されたメモリの読み取りまたは書き込みを試みました。多くの場合、これは他のメモリが破損していることを示しています
コンポーネントメーカーは、これは社内で使用しているコンポーネントの最新バージョンで修正されたと言いますが、これはまだ顧客に提供されていません。
エラーの結果が低い(作業が失われず、プログラムを再起動して、せいぜい1分で戻ることができる)ことと、顧客がまもなく新しいバージョン(更新された3番目のパーティコンポーネント)、私は明らかに私の指を交差させることができ、エラーが再び発生しないことを願っています。
しかし、私にできることは他にありますか?
はい。このエラーは、.NETエラーにマッピングされなかった構造化例外です。おそらくキャッチされなかったネイティブ例外をスローするDataGridマッピングです。
ExternalException.ErrorCode プロパティを見ると、どの例外が発生しているかがわかります。スタックトレースを確認し、DevExpressグリッドに関連付けられている場合は、問題を報告します。
私のプログラムが最初にネイティブdllラッパーを使用したときにスローされたSEHExceptionについても同様の問題がありました。そのラッパーのネイティブDLLが欠落していることが判明しました。例外は、これを解決するのに決して役に立ちませんでした。最終的に助けとなったのは、バックグラウンドでprocmonを実行し、必要なDLLをすべてロードするときにエラーが発生していないかどうかを確認することでした。
この投稿で説明しているように問題がある場合:
asp.net mvcデバッガーがSEHExceptionをスロー
解決策は次のとおりです。
trusteerのアプリケーション(親密な関係など)がある場合は、システムをアンインストールして再起動するだけで問題なく動作します...この解決策は次のとおりです。
http://forums.asp.net/t/1704958.aspx/8/10?Re+SEHException+thrown+when+I+run+the+application
コンポーネントメーカーは、これは社内で使用しているコンポーネントの最新バージョンで修正されたと言いますが、これはまだ顧客に提供されています。
コンポーネントメーカーに、顧客が取得している問題が、最新バージョンをお客様に展開する前/前に、最新バージョンで修正したと言っている問題であるかどうかをテストする方法を尋ねます。
アプリがネットワーク共有上に存在し、アプリの使用中にデバイス(ラップトップ、タブレットなど)がネットワークから切断されると、このエラーに遭遇しました。私の場合、Surfaceタブレットがワイヤレス範囲外に出ていたことが原因でした。より良いWAPをインストールしても問題ありません。
ちょうど別の情報...アプリケーションがunc/networkパスから開始されたWindows 2012 R2 x64 TSシステムで今日問題がありました。この問題は、すべてのターミナルサーバーユーザーの1つのアプリケーションで発生しました。ローカルで問題なくアプリケーションを実行できました。再起動後、再び動作を開始しました-SEHExceptionがスローされたのはConstructor initおよびTargetInvocationExceptionでした
私のマシン構成:
オペレーティングシステム:Windows 10バージョン1703(x64)
Visual Studio 2017 CommunityエディションでC#.Netプロジェクトをデバッグ中にこのエラーに直面しました。実行時に読み込まれたC++アセンブリでp/invokeを実行して、ネイティブメソッドを呼び出していました。 OPが報告したのとまったく同じエラーが発生しました。
マシンの管理者ではないユーザーアカウントでVisual Studioが起動されたことに気付きました。次に、マシンの管理者である別のユーザーアカウントでVisual Studioを再起動しました。それで全部です。私の問題は解決し、再び問題に直面することはありませんでした。
注意すべきことの1つは、C++アセンブリで呼び出されていたメソッドがレジストリにほとんど記述しないことになっていることです。 RCAを実行するためにC++コードをデバッグしませんでしたが、Windows 10オペレーティングシステムでレジストリを作成するには管理者権限が必要なため、全体が失敗する可能性があります。そのため、以前はマシンの管理者権限を持たないユーザーアカウントでVisual Studioを実行していた場合、ネイティブ呼び出しは失敗していました。