Domanda

Ogni volta che un utente segnala un errore come

Sistema.Runtime.InteropServices.SEHException - Componente esterno ha generato un'eccezione?

c'è qualcosa che ho come un programmatore può fare per determinare la causa?

Scenario :Un utente (che utilizza un programma per la mia azienda ha scritto) ha segnalato questo errore.Questo può o non può essere stato un errore.Hanno detto che nell'ultimo mese, il computer dispone di due volte 'smesso di funzionare".Ho imparato per esperienza, non per prendere questa descrizione troppo letteralmente, come di solito significa che qualcuno relativi al computer non funziona come previsto.Essi erano in grado di darmi più dettagli e non sono riuscito a trovare gli errori registrati.Per cui si può o non può essere stato questo errore.

Dallo stack-trace, l'errore effettivo quando la costruzione di una classe di cui non è direttamente chiamata in qualsiasi interoperabilità codice, ma forse complicata dal fatto che l'oggetto può essere parte di un elenco che è associato a dati di un DevExpress Griglia.

L'errore è stato 'catturato' da un'eccezione non gestita di routine che normalmente chiude il programma, ma ha un'opzione per ignorare e continuare.Se hanno optato per ignorare l'errore, il programma ha continuato a lavorare, ma l'errore ri-verificato quando questa routine è stata la successiva esecuzione.Tuttavia non si è verificato di nuovo dopo la chiusura e il riavvio della nostra applicazione.

Il computer in questione non sembra essere stressato.È in esecuzione Vista Business, dispone di 2 gb di memoria e secondo il Task Manager è stato solo utilizzando circa la metà con la nostra applicazione solo circa 200Mb.

C'è un altro pezzo di informazioni che possono o non possono essere rilevanti.Un'altra sezione dello stesso programma utilizza un componente di terze parti che è effettivamente una dotnet wrapper di una dll nativa e questo componente ha un problema noto, in cui molto raramente, si ottiene un

Un tentativo di lettura o scrittura della memoria protetta.Questo è spesso un'indicazione che l'altra memoria è danneggiato

I produttori di componenti di dire che questo è stato risolto nell'ultima versione del componente che si sta utilizzando in-house, ma questo non è stato dato al cliente sicurezza.

Dato che le conseguenze di errore sono bassi (non lavoro è perso e riavviare il programma e tornare a dove erano richiede solo un minuto in più) e dato che il cliente sarà presto arrivare una nuova versione (con l'aggiornamento della componente di terze parti), posso ovviamente incrocio le dita e sperare che l'errore non si verifica di nuovo.

Ma c'è qualcosa che posso fare in più?

È stato utile?

Soluzione

Sì.Questo errore è strutturato eccezione che non era mappata in un .Errore di rete.Probabilmente il tuo DataGrid mappatura lancio di un'eccezione nativa che è stata catturata.

Si può dire che l'eccezione si verifica guardando l' ExternalException.ErrorCode proprietà.Mi piacerebbe verificare stack trace, e se è legato al DevExpress griglia, segnalare il problema a loro.

Altri suggerimenti

Ho avuto un problema simile con un SEHException che è stata lanciata quando il mio primo programma utilizzato una dll nativa wrapper.Scoperto che la DLL nativa per il wrapper è stato mancante.L'eccezione è stata in alcun modo utile per risolvere questo.Che cosa ha fatto il resto era in esecuzione procmon in background e controlla se ci sono stati errori durante il caricamento di tutte le Dll necessarie.

se si stanno avendo un problema come descritto in questo post:

asp.net mvc debugger lancio SEHException

quindi la soluzione è:

se avete qualche domanda da Trusteer (come il rapport o nulla ) solo disinstallare e riavviare il sistema funzionerà bene ...trovato questa soluzione qui:

http://forums.asp.net/t/1704958.aspx/8/10?Re+SEHException+thrown+when+I+run+the+application

I produttori di componenti di dire che questo è stato risolto nell'ultima versione del componente che si sta utilizzando in-house, ma questo è stato dato al cliente sicurezza.

Chiedere al produttore di componenti come verificare se il problema che il cliente è sempre il problema è che dicono di aver risolto nella versione più recente, senza/prima di implementare la loro ultima versione per il cliente.

Mi sono imbattuto in questo errore quando l'applicazione risiede su una condivisione di rete, e il dispositivo (laptop, tablet, ...) viene disconnesso dalla rete, mentre l'app è in uso.Nel mio caso, è stato a causa di un tablet Surface di andare fuori del raggio di copertura wireless.Senza problemi dopo l'installazione di un migliore WAP.

Solo un'altra informazione...Ha avuto quel problema oggi su Windows 2012 R2 x64 TS sistema in cui l'applicazione è stata avviata da un unc/percorso di rete.Il problema si è verificato per una applicazione per tutti gli utenti di terminal server.L'esecuzione di un'applicazione locale ha funzionato senza problemi.Dopo un riavvio ha iniziato a lavorare di nuovo - il SEHException buttato era stato Costruttore di init e TargetInvocationException

La mia macchina configurazioni :

Sistema Operativo :Windows 10 Versione del 1703 (x64)

Ho affrontato questo errore durante il debug il C# .Net progetto in Visual Studio 2017 Community edition.Mi stava chiamando un metodo nativo mediante l'esecuzione di p/invoke su C++, assembly caricati in fase di esecuzione.Ho riscontrato lo stesso errore segnalato da OP.

Ho capito che Visual Studio è stato lanciato con un account utente che non era un amministratore sulla macchina.Poi ho rilanciato Visual Studio in un altro account utente che è stato un amministratore sulla macchina.Questo è tutto.Il mio problema, ma ho risolto e non mi faccia nuovamente il problema.

Una cosa da notare è che il metodo che è stato invocato su C++ assemblea doveva scrivere alcune cose in registro di sistema.Non ho il debug di codice C++ per fare alcuni RCA, ma la vedo una possibilità che il tutto è stato mancato di privilegi amministrativi sono tenuti a scrivere registro di sistema in Windows 10 sistema operativo.Quindi, prima di quando Visual Studio è stato eseguito con un account utente che non dispone di privilegi amministrativi sulla macchina, quindi il nativo di chiamate sono state fallendo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top