Каждый раз, когда пользователь сообщает об ошибке, например
System.Runtime.InteropServices.SEHException - Внешний компонент вызвал исключение?
Могу ли я, как программист, что-нибудь сделать, чтобы определить причину?
Сценарий: об этой ошибке сообщил один пользователь (использующий программу, написанную моей компанией). Это могло быть или не быть разовой ошибкой. Они упомянули, что за последний месяц компьютер дважды «переставал работать». На собственном опыте я научился не понимать это описание слишком буквально, поскольку обычно это означает, что кто-то, имеющий отношение к компьютеру, работает не так, как ожидалось. Они не смогли предоставить мне более подробную информацию, и я не смог найти никаких зарегистрированных ошибок. Следовательно, это могла быть или не быть эта ошибка.
Из трассировки стека фактическая ошибка возникла при создании класса, который напрямую не вызывает какой-либо код взаимодействия, но, возможно, осложнен тем, что объект может быть частью списка, привязанного к DevExpress Grid.
Ошибка была «поймана» подпрограммой необработанного исключения, которая обычно закрывает программу, но имеет возможность игнорировать и продолжить. Если они решили проигнорировать ошибку, программа продолжала работать, но ошибка возникла снова при следующем запуске этой процедуры. Однако после закрытия и перезапуска нашего приложения этого не произошло.
Рассматриваемый компьютер, похоже, не был перегружен. Он работает под управлением Vista Business, имеет 2 ГБ памяти и, согласно диспетчеру задач, он использовал только около половины этой памяти с нашим приложением, всего около 200 МБ.
Есть еще одна информация, которая может иметь или не иметь отношения к делу. В другом разделе той же программы используется сторонний компонент, который по сути представляет собой оболочку dotnet вокруг собственной библиотеки DLL, и у этого компонента есть известная проблема, при которой очень иногда вы получаете
Попытка прочитать или записать в защищенную память. Это часто указывает на то, что другая память повреждена.
Производители компонентов говорят, что это было исправлено в последней версии их компонентов, которые мы используем внутри компании, но это еще не было передано заказчику.
Учитывая, что последствия ошибки незначительны (работа не теряется, перезапуск программы и возвращение туда, где они были, занимает не более минуты) и учитывая, что заказчик вскоре получит новую версию (с обновленной третьей- party), я, очевидно, могу скрестить пальцы и надеяться, что ошибка больше не повторится.
Но могу ли я еще что-нибудь сделать?
источник
У меня была аналогичная проблема с исключением SEHException, которое было вызвано, когда моя программа впервые использовала собственную оболочку dll. Оказалось, что нативная DLL для этой оболочки отсутствует. Исключение никоим образом не помогло решить эту проблему. Что помогло в конечном итоге, так это запуск procmon в фоновом режиме и проверка наличия ошибок при загрузке всех необходимых DLL.
источник
если у вас возникла проблема, описанная в этом посте:
Отладчик asp.net mvc генерирует исключение SEHException
тогда решение:
если у вас есть какое-либо приложение от Trusteer (например, rapport или что-то еще), просто удалите и перезагрузите свою систему, оно будет работать нормально ... нашел это решение здесь:
http://forums.asp.net/t/1704958.aspx/8/10?Re+SEHException+thrown+when+I+run+the+application
источник
Спросите у производителя компонентов, как проверить, является ли проблема, с которой сталкивается клиент, проблемой, которую, по их словам, они исправили в своей последней версии, без / до развертывания последней версии для клиента.
источник
Я столкнулся с этой ошибкой, когда приложение находится в общем сетевом ресурсе, и устройство (ноутбук, планшет, ...) отключается от сети во время использования приложения. В моем случае это произошло из-за того, что планшет Surface вышел за пределы диапазона беспроводной связи. Никаких проблем после установки лучшего WAP.
источник
Еще одна информация ... Была эта проблема сегодня в системе Windows 2012 R2 x64 TS, где приложение было запущено из unc / сетевого пути. Проблема возникла для одного приложения для всех пользователей терминального сервера. Запуск приложения локально прошел без проблем. После перезагрузки он снова начал работать - выброшенное SEHException было Constructor init и TargetInvocationException
источник
Мои конфигурации машины:
Операционная система: Windows 10 версии 1703 (x64)
Я столкнулся с этой ошибкой при отладке моего проекта C # .Net в Visual Studio 2017 Community edition. Я вызывал собственный метод, выполняя p / invoke в сборке C ++, загруженной во время выполнения. Я столкнулся с той же ошибкой, о которой сообщил OP.
Я понял, что Visual Studio была запущена с учетной записью пользователя, которая не была администратором на машине. Затем я перезапустил Visual Studio под другой учетной записью пользователя, которая была администратором на машине. Вот и все. Моя проблема была решена, и я больше с ней не сталкивался.
Следует отметить, что метод, который был вызван на сборке C ++, должен был записывать несколько вещей в реестр. Я не отлаживал код C ++, чтобы выполнить некоторую RCA, но я вижу вероятность того, что все это не удалось, поскольку для записи реестра в операционной системе Windows 10 требуются права администратора. Итак, раньше, когда Visual Studio работала под учетной записью пользователя, у которой не было административных прав на машине, собственные вызовы не выполнялись.
источник
Я получил эту ошибку при выполнении модульных тестов на настроенное мной кеширование памяти. Залил кеш. После аннулирования кеша и перезапуска виртуальной машины все заработало.
источник