Reputation: 16067
Whenever a user reports an error such as
System.Runtime.InteropServices.SEHException - External component has thrown an exception?
is there anything that I as a programmer can do to determine the cause?
Scenario : One user (using a program my company wrote) has reported this error. This may or may not have been a one off error. They mentioned that in the last month, the computer has twice 'stopped working'. I have learnt from experience, not to take this description too literally, as it usually means that someone relating to the computer is not working as expected. They were unable to give me more details and I could not find any logged errors. Hence it may or may not have been this error.
From the stack-trace, the actual error was when constructing a class which does not directly call any interop code, but perhaps complicated by the fact that the object may be part of a list that is databound to a DevExpress Grid.
The error was 'caught' by an unhandled exception routine which normally will close down the program, but has an option to ignore and continue. If they opted to ignore the error, then the program continued working but the error re-occurred when this routine was next run. However it did not occur again after closing and restarting our application.
The computer in question did not seem to be stressed out. It is running Vista Business, has 2GB of memory and according to Task Manager was only using about half of that with our application just about 200Mb.
There is one other piece of information that may or may not be relevant. Another section of the same program uses a third party component which is effectively a dotnet wrapper around a native dll and this component does have a known issue where very occasionally, you get a
Attempted to read or write protected memory. This is often an indication that other memory is corrupt
The component makers say that this has been fixed in the latest version of their component which we are using in-house, but this has not been given to the customer yet.
Given that the consequences of the error are low (no work is lost and restarting the program and getting back to where they were only takes a minute at most) and given that the customer will shortly be getting a new version (with the updated third-party component), I can obviously cross my fingers and hope the error won't occur again.
But is there anything more I can do?
Upvotes: 103
Views: 220993
Reputation: 196
I had this most recently. It was issued by legacy code because one of our Devs unreflectedly refactored a data class which is serialized into JSON and the legacy code could not deserialize the JSON anymore. I pretty bad legacy code has no null checks and the related token can not be found.
That is an equivalent to a NRE resulting in that SEHException on the managed side.
Upvotes: 0
Reputation: 25877
My machine configurations :
Operating System : Windows 10 Version 1703 (x64)
I faced this error while debugging a C# .NET project in Visual Studio 2017 Community edition. I was calling a native method by performing p/invoke on a C++ assembly loaded at run-time. I encountered the very same error reported by OP.
After doing some analysis, I found that Visual Studio was running with a non-admin user account. So I relaunched Visual Studio under a different user account which had administrative privileges on the machine. That's all. My problem got resolved and I didn't face the issue again.
One thing to note is that the method which was being invoked on C++ assembly was supposed to write few things in registry. I didn't go debugging the C++ code to do further analysis. But I see a possibility that the whole thing was failing as administrative privileges are required to write in registry. So earlier when Visual Studio was running under a user account without administrative privileges on the machine, then the native calls were failing.
Upvotes: 2
Reputation: 1
I got this error in a mere if like:
if (table.Equals("asd", StringComparison.OrdinalIgnoreCase))
{
...
}
Solved wrapping in a try catch like bellow. Why it happened, why it solved, still a mistery:
try
{
if (table.Equals("asd", StringComparison.OrdinalIgnoreCase))
{
...
}
}
Exception()
{
}
Upvotes: 0
Reputation: 109
I got this error while running unit tests on inmemory caching I was setting up. It flooded the cache. After invalidating the cache and restarting the VM, it worked fine.
Upvotes: 0
Reputation: 2359
I have come across this error when the app resides on a network share, and the device (laptop, tablet, ...) becomes disconnected from the network while the app is in use. In my case, it was due to a Surface tablet going out of wireless range. No problems after installing a better WAP.
Upvotes: 1
Reputation:
Just another information... Had that problem today on a Windows 2012 R2 x64 TS system where the application was started from a unc/network path. The issue occured for one application for all terminal server users. Executing the application locally worked without problems. After a reboot it started working again - the SEHException's thrown had been Constructor init and TargetInvocationException
Upvotes: 1
Reputation: 1954
I had a similar problem with an SEHException that was thrown when my program first used a native dll wrapper. Turned out that the native DLL for that wrapper was missing. The exception was in no way helpful in solving this. What did help in the end was running procmon in the background and checking if there were any errors when loading all the necessary DLLs.
Upvotes: 10
Reputation: 4497
if you are having a problem as describe in this post:
asp.net mvc debugger throwing SEHException
then the solution is:
if you have any application from Trusteer (like rapport or anything ) just uninstall and reboot your system, it'll work fine ... found this solution here:
http://forums.asp.net/t/1704958.aspx/8/10?Re+SEHException+thrown+when+I+run+the+application
Upvotes: 5
Reputation: 56083
The component makers say that this has been fixed in the latest version of their component which we are using in-house, but this has been given to the customer yet.
Ask the component maker how to test whether the problem that the customer is getting is the problem which they say they've fixed in their latest version, without/before deploying their latest version to the customer.
Upvotes: 3
Reputation: 564323
Yes. This error is a structured exception that wasn't mapped into a .NET error. It's probably your DataGrid mapping throwing a native exception that was uncaught.
You can tell what exception is occurring by looking at the ExternalException.ErrorCode property. I'd check your stack trace, and if it's tied to the DevExpress grid, report the problem to them.
Upvotes: 31