Zawsze, gdy użytkownik zgłosi błąd, taki jak
System.Runtime.InteropServices.SEHException - Składnik zewnętrzny zgłosił wyjątek?
czy jest coś, co ja jako programista mogę zrobić, aby ustalić przyczynę?
Scenariusz: jeden użytkownik (korzystający z programu napisanego przez moją firmę) zgłosił ten błąd. To mógł być jednorazowy błąd lub nie. Wspomnieli, że w ostatnim miesiącu komputer dwukrotnie „przestał działać”. Nauczyłem się z doświadczenia, aby nie brać tego opisu zbyt dosłownie, ponieważ zwykle oznacza to, że ktoś związany z komputerem nie działa zgodnie z oczekiwaniami. Nie mogli podać mi więcej szczegółów i nie mogłem znaleźć żadnych zarejestrowanych błędów. Dlatego mógł to być ten błąd lub nie.
Ze śledzenia stosu, rzeczywisty błąd wystąpił podczas konstruowania klasy, która nie wywołuje bezpośrednio żadnego kodu międzyoperacyjnego, ale może być skomplikowana przez fakt, że obiekt może być częścią listy, która jest powiązana z siecią DevExpress.
Błąd został „przechwycony” przez nieobsługiwaną procedurę wyjątku, która normalnie zamyka program, ale ma opcję zignorowania i kontynuowania. Jeśli zdecydowali się zignorować błąd, program nadal działał, ale błąd wystąpił ponownie po kolejnym uruchomieniu tej procedury. Jednak nie wystąpiło to ponownie po zamknięciu i ponownym uruchomieniu naszej aplikacji.
Omawiany komputer nie wydawał się zestresowany. Działa na systemie Vista Business, ma 2 GB pamięci i według Menedżera zadań zużywał tylko połowę tego z naszą aplikacją, czyli około 200 MB.
Jest jeszcze jedna informacja, która może być istotna lub nie. Inna sekcja tego samego programu wykorzystuje składnik innej firmy, który jest efektywnie opakowaniem dotnet wokół natywnej biblioteki dll i ten składnik ma znany problem, w którym bardzo rzadko pojawia się
Próbowano odczytać lub zapisać chronioną pamięć. Często wskazuje to na uszkodzenie innej pamięci
Twórcy komponentów twierdzą, że zostało to naprawione w najnowszej wersji ich komponentu, którego używamy na miejscu, ale nie zostało to jeszcze przekazane klientowi.
Biorąc pod uwagę, że konsekwencje błędu są niewielkie (żadna praca nie zostanie utracona, a ponowne uruchomienie programu i powrót do miejsca, w którym się znajdowały, zajmuje najwyżej minutę) oraz że klient wkrótce otrzyma nową wersję (ze zaktualizowaną trzecią party), oczywiście trzymam kciuki i mam nadzieję, że błąd się nie powtórzy.
Ale czy jest coś więcej, co mogę zrobić?
źródło
Miałem podobny problem z SEHException, który został wyrzucony, gdy mój program po raz pierwszy użył natywnego opakowania dll. Okazało się, że brakuje natywnej biblioteki DLL dla tego opakowania. Wyjątek nie był w żaden sposób pomocny w rozwiązaniu tego problemu. Ostatecznie pomogło uruchomienie procmon w tle i sprawdzenie, czy podczas ładowania wszystkich niezbędnych bibliotek DLL wystąpiły jakieś błędy.
źródło
jeśli masz problem opisany w tym poście:
debuger mvc asp.net generujący wyjątek SEHException
wtedy rozwiązaniem jest:
jeśli masz jakąś aplikację z Trusteer (jak rapport lub cokolwiek), po prostu odinstaluj i uruchom ponownie system, będzie działać dobrze ... znalazłem to rozwiązanie tutaj:
http://forums.asp.net/t/1704958.aspx/8/10?Re+SEHException+thrown+when+I+run+the+application
źródło
Zapytaj producenta komponentów, jak sprawdzić, czy problem napotykany przez klienta jest problemem, który, jak twierdzi, naprawił w swojej najnowszej wersji, bez / przed wdrożeniem najnowszej wersji u klienta.
źródło
Natknąłem się na ten błąd, gdy aplikacja znajduje się w udziale sieciowym, a urządzenie (laptop, tablet, ...) zostaje odłączone od sieci, gdy aplikacja jest używana. W moim przypadku było to spowodowane wyjściem tabletu Surface z zasięgu bezprzewodowego. Żadnych problemów po zainstalowaniu lepszego WAP.
źródło
Jeszcze jedna informacja ... Miałem ten problem dzisiaj w systemie Windows 2012 R2 x64 TS, w którym aplikacja została uruchomiona ze ścieżki UNC / sieci. Wystąpił problem dla jednej aplikacji dla wszystkich użytkowników serwera terminali. Lokalne uruchomienie aplikacji przebiegło bez problemów. Po ponownym uruchomieniu ponownie zaczął działać - wyrzucony został SEHException Constructor init i TargetInvocationException
źródło
Moje konfiguracje maszyn:
System operacyjny: Windows 10 wersja 1703 (x64)
Napotkałem ten błąd podczas debugowania mojego projektu C # .Net w Visual Studio 2017 Community Edition. Wywoływałem metodę natywną, wykonując p / invoke na zestawie C ++ załadowanym w czasie wykonywania. Napotkałem ten sam błąd zgłoszony przez OP.
Zdałem sobie sprawę, że Visual Studio zostało uruchomione z kontem użytkownika, który nie był administratorem na komputerze. Następnie ponownie uruchomiłem Visual Studio na innym koncie użytkownika, który był administratorem na komputerze. To wszystko. Mój problem został rozwiązany i nie napotkałem go ponownie.
Należy zauważyć, że metoda, która była wywoływana w asemblerze C ++, miała zapisywać kilka rzeczy w rejestrze. Nie poszedłem debugować kodu C ++, aby wykonać RCA, ale widzę możliwość, że wszystko zawodziło, ponieważ uprawnienia administratora są wymagane do napisania rejestru w systemie operacyjnym Windows 10. Tak więc wcześniej, gdy program Visual Studio działał na koncie użytkownika, które nie miało uprawnień administracyjnych na komputerze, wywołania natywne kończyły się niepowodzeniem.
źródło
Wystąpił ten błąd podczas uruchamiania testów jednostkowych dotyczących buforowania pamięci, które konfigurowałem. Zalała pamięć podręczną. Po unieważnieniu pamięci podręcznej i ponownym uruchomieniu maszyny wirtualnej działało dobrze.
źródło