[c#] SEHException 오류를 진단하는 방법-외부 구성 요소에서 예외가 발생했습니다.

사용자가 다음과 같은 오류를보고 할 때마다

System.Runtime.InteropServices.SEHException- 외부 구성 요소에서 예외가 발생 했습니까?

프로그래머로서 제가 원인을 파악하기 위해 할 수있는 일이 있습니까?

시나리오 : 한 사용자 (회사에서 작성한 프로그램 사용)가이 오류를보고했습니다. 이것은 일회성 오류 일 수도 있고 아닐 수도 있습니다. 그들은 지난 달에 컴퓨터가 두 번 ‘작동을 멈췄다’고 언급했습니다. 나는 경험을 통해 배웠습니다.이 설명을 너무 문자 그대로 받아들이지 않는 것은 일반적으로 컴퓨터와 관련된 누군가가 예상대로 작동하지 않음을 의미하기 때문입니다. 그들은 나에게 더 자세한 정보를 제공 할 수 없었고 기록 된 오류를 찾을 수 없었습니다. 따라서이 오류 일 수도 있고 아닐 수도 있습니다.

스택 추적에서 실제 오류는 interop 코드를 직접 호출하지 않는 클래스를 생성 할 때 발생했지만 개체가 DevExpress Grid에 데이터 바인딩 된 목록의 일부일 수 있다는 사실로 인해 복잡 할 수 있습니다.

일반적으로 프로그램을 종료하지만 무시하고 계속할 수있는 옵션이있는 처리되지 않은 예외 루틴에 의해 오류가 ‘발견’되었습니다. 오류를 무시하도록 선택한 경우 프로그램은 계속 작동하지만이 루틴이 다음에 실행될 때 오류가 다시 발생했습니다. 그러나 응용 프로그램을 닫고 다시 시작한 후에는 다시 발생하지 않았습니다.

문제의 컴퓨터는 스트레스를받지 않는 것 같았습니다. 그것은 비스타 비즈니스를 실행하고 있으며 2GB의 메모리를 가지고 있으며 작업 관리자에 따르면 약 200Mb에 불과한 우리 응용 프로그램에서 절반 정도만 사용했습니다.

관련성이있을 수도 있고 아닐 수도있는 다른 정보가 있습니다. 동일한 프로그램의 또 다른 섹션은 네이티브 dll 주변의 dotnet 래퍼 인 타사 구성 요소를 사용하며이 구성 요소에는 매우 가끔씩 발생하는 알려진 문제가 있습니다.

보호 된 메모리를 읽거나 쓰려고했습니다. 이것은 종종 다른 메모리가 손상되었음을 나타냅니다.

부품 제조사들은 이것이 우리가 자체적으로 사용하는 최신 버전의 부품에서 수정되었다고 말했지만 아직 고객에게 제공되지 않았습니다.

오류의 결과가 낮고 (작업이 손실되지 않고 프로그램을 다시 시작하고 원래 위치로 돌아가는 데 최대 1 분 밖에 걸리지 않음) 고객이 곧 새 버전을받을 수 있다는 점을 감안할 때 (업데이트 된 세 번째- 파티 구성 요소), 분명히 내 손가락을 교차시킬 수 있으며 오류가 다시 발생하지 않기를 바랍니다.

하지만 내가 할 수있는 일이 더 있습니까?



답변

예. 이 오류는 .NET 오류로 매핑되지 않은 구조화 된 예외입니다. 잡히지 않은 네이티브 예외를 던지는 DataGrid 매핑 일 것입니다.

ExternalException.ErrorCode 속성 을 보면 어떤 예외가 발생했는지 알 수 있습니다 . 스택 추적을 확인하고 DevExpress 그리드에 연결되어 있으면 문제를보고합니다.


답변

내 프로그램이 처음 네이티브 dll 래퍼를 사용할 때 throw되는 SEHException과 비슷한 문제가 발생했습니다. 해당 래퍼에 대한 기본 DLL이 없음이 밝혀졌습니다. 예외는이 문제를 해결하는 데 전혀 도움이되지 않았습니다. 결국 도움이 된 것은 백그라운드에서 procmon을 실행하고 필요한 모든 DLL을로드 할 때 오류가 있는지 확인하는 것이 었습니다.


답변

이 게시물에 설명 된대로 문제가있는 경우 :

SEHException을 던지는 asp.net mvc 디버거

해결책은 다음과 같습니다.

Trusteer의 응용 프로그램 (예 : rapport 또는 기타)이있는 경우 시스템을 제거하고 재부팅하면 정상적으로 작동합니다. 여기에서이 솔루션을 찾았습니다.

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 시스템에서 오늘 문제가 발생했습니다. 이 문제는 모든 터미널 서버 사용자에 대해 하나의 응용 프로그램에서 발생했습니다. 응용 프로그램을 로컬에서 실행하면 문제없이 작동했습니다. 재부팅 후 다시 작동하기 시작했습니다. SEHException이 throw 된 것은 Constructor init 및 TargetInvocationException이었습니다.


답변

내 컴퓨터 구성 :

운영 체제 : Windows 10 버전 1703 (x64)

Visual Studio 2017 Community Edition에서 C # .Net 프로젝트를 디버깅하는 동안이 오류가 발생했습니다. 런타임에로드 된 C ++ 어셈블리에서 p / invoke를 수행하여 네이티브 메서드를 호출했습니다. OP에서보고 한 것과 동일한 오류가 발생했습니다.

Visual Studio가 컴퓨터의 관리자가 아닌 사용자 계정으로 시작되었음을 깨달았습니다. 그런 다음 컴퓨터의 관리자 인 다른 사용자 계정으로 Visual Studio를 다시 시작했습니다. 그게 다야. 내 문제가 해결되었고 다시 문제에 직면하지 않았습니다.

한 가지 주목할 점은 C ++ 어셈블리에서 호출되는 메서드가 레지스트리에 몇 가지 사항을 작성해야한다는 것입니다. 일부 RCA를 수행하기 위해 C ++ 코드를 디버깅하지 않았지만 Windows 10 운영 체제에서 레지스트리를 작성하려면 관리자 권한이 필요하기 때문에 모든 것이 실패 할 가능성이 있습니다. 따라서 이전에 Visual Studio가 컴퓨터에 대한 관리 권한이없는 사용자 계정으로 실행될 때 네이티브 호출이 실패했습니다.