Sempre que um usuário relata um erro como
System.Runtime.InteropServices.SEHException - O componente externo lançou uma exceção?
há algo que eu, como programador, possa fazer para determinar a causa?
Cenário: um usuário (usando um programa que minha empresa escreveu) relatou este erro. Isso pode ou não ter sido um erro único. Eles mencionaram que no último mês, o computador 'parou de funcionar' duas vezes. Aprendi com a experiência a não interpretar essa descrição muito literalmente, pois geralmente significa que alguém que está se relacionando com o computador não está funcionando como esperado. Eles não puderam me fornecer mais detalhes e eu não consegui encontrar nenhum erro registrado. Portanto, pode ou não ter sido esse erro.
A partir do rastreamento da pilha, o erro real foi ao construir uma classe que não chama diretamente nenhum código de interoperabilidade, mas talvez complicado pelo fato de que o objeto pode fazer parte de uma lista que é ligada a um DevExpress Grid.
O erro foi 'detectado' por uma rotina de exceção não tratada que normalmente fecha o programa, mas tem a opção de ignorar e continuar. Se eles optaram por ignorar o erro, o programa continuou funcionando, mas o erro voltou a ocorrer na próxima execução dessa rotina. No entanto, isso não ocorreu novamente após fechar e reiniciar nosso aplicativo.
O computador em questão não parecia estressado. Ele está rodando o Vista Business, tem 2 GB de memória e de acordo com o Gerenciador de Tarefas estava usando apenas cerca de metade disso com nosso aplicativo apenas cerca de 200 Mb.
Existe uma outra informação que pode ou não ser relevante. Outra seção do mesmo programa usa um componente de terceiros que é efetivamente um wrapper dotnet em torno de uma dll nativa e este componente tem um problema conhecido onde, muito ocasionalmente, você obtém um
Tentativa de ler ou gravar memória protegida. Isso geralmente é uma indicação de que outra memória está corrompida
Os fabricantes de componentes dizem que isso foi corrigido na versão mais recente de seus componentes, que estamos usando internamente, mas isso ainda não foi fornecido ao cliente.
Dado que as consequências do erro são baixas (nenhum trabalho é perdido e reiniciar o programa e voltar para onde estava leva apenas um minuto no máximo) e dado que o cliente em breve receberá uma nova versão (com o terceiro atualizado componente de festa), obviamente posso cruzar os dedos e esperar que o erro não ocorra novamente.
Mas há algo mais que eu possa fazer?
fonte
Eu tive um problema semelhante com uma SEHException que foi lançada quando meu programa usou pela primeira vez um wrapper dll nativo. Descobri que a DLL nativa desse wrapper estava faltando. A exceção não ajudou de forma alguma a resolver isso. O que ajudou no final foi executar o procmon em segundo plano e verificar se havia algum erro ao carregar todas as DLLs necessárias.
fonte
se você está tendo um problema, conforme descrito nesta postagem:
depurador asp.net mvc lançando SEHException
então a solução é:
se você tiver algum aplicativo da Trusteer (como rapport ou qualquer coisa), desinstale e reinicie o sistema, vai funcionar bem ... encontrei esta solução aqui:
http://forums.asp.net/t/1704958.aspx/8/10?Re+SEHException+thrown+when+I+run+the+application
fonte
Pergunte ao fabricante do componente como testar se o problema que o cliente está tendo é o problema que ele afirma ter corrigido em sua versão mais recente, sem / antes de implantar a versão mais recente para o cliente.
fonte
Encontrei este erro quando o aplicativo reside em um compartilhamento de rede e o dispositivo (laptop, tablet, ...) é desconectado da rede enquanto o aplicativo está em uso. No meu caso, foi devido a um tablet Surface sair do alcance sem fio. Sem problemas após instalar um WAP melhor.
fonte
Apenas mais uma informação ... Tive esse problema hoje em um sistema Windows 2012 R2 x64 TS onde o aplicativo foi iniciado a partir de um caminho unc / rede. O problema ocorreu em um aplicativo para todos os usuários do servidor de terminal. Executar o aplicativo localmente funcionou sem problemas. Após uma reinicialização, ele começou a funcionar novamente - a SEHException lançada foi Construtor init e TargetInvocationException
fonte
Configurações da minha máquina:
Sistema operacional: Windows 10 versão 1703 (x64)
Eu enfrentei este erro ao depurar meu projeto C # .Net no Visual Studio 2017 Community edition. Eu estava chamando um método nativo executando p / invoke em um assembly C ++ carregado em tempo de execução. Encontrei o mesmo erro relatado pelo OP.
Percebi que o Visual Studio foi iniciado com uma conta de usuário que não era de administrador na máquina. Em seguida, reiniciei o Visual Studio com uma conta de usuário diferente, que era um administrador na máquina. Isso é tudo. Meu problema foi resolvido e não o encarei novamente.
Uma coisa a notar é que o método que estava sendo invocado no assembly C ++ deveria escrever algumas coisas no registro. Não fui depurar o código C ++ para fazer um RCA, mas vejo a possibilidade de que tudo estava falhando, pois são necessários privilégios administrativos para escrever o registro no sistema operacional Windows 10. Portanto, antes, quando o Visual Studio estava sendo executado em uma conta de usuário que não tinha privilégios administrativos na máquina, as chamadas nativas estavam falhando.
fonte
Recebi este erro ao executar testes de unidade no cache de memória que estava configurando. Ele inundou o cache. Depois de invalidar o cache e reiniciar a VM, funcionou bem.
fonte