92

每当用户报告错误时,例如

System.Runtime.InteropServices.SEHException - 外部组件抛出异常?

作为程序员,我可以做些什么来确定原因吗?

场景:一位用户(使用我公司编写的程序)报告了此错误。这可能是也可能不是一次性错误。他们提到,在上个月,计算机已经两次“停止工作”。我从经验中吸取了教训,不要太从字面上理解这个描述,因为这通常意味着与计算机相关的人没有按预期工作。他们无法给我更多细节,我也找不到任何记录的错误。因此,它可能是也可能不是这个错误。

从堆栈跟踪来看,实际错误是在构造一个不直接调用任何互操作代码的类时,但可能由于对象可能是数据绑定到 DevExpress 网格的列表的一部分而变得复杂。

该错误被未处理的异常例程“捕获”,该例程通常会关闭程序,但可以选择忽略并继续。如果他们选择忽略该错误,则程序继续工作,但在下次运行该例程时错误再次发生。但是,在关闭并重新启动我们的应用程序后,它并没有再次发生。

有问题的计算机似乎没有受到压力。它运行 Vista Business,有 2GB 内存,根据任务管理器只使用大约一半的内存,而我们的应用程序只有大约 200Mb。

还有另一条信息可能相关也可能不相关。同一程序的另一部分使用第三方组件,该组件实际上是原生 dll 周围的 dotnet 包装器,并且该组件确实存在一个已知问题,在这种情况下,您偶尔会遇到

尝试读取或写入受保护的内存。这通常表明其他内存已损坏

组件制造商表示,这已在我们内部使用的最新版本的组件中修复,但尚未提供给客户。

鉴于错误的后果很低(没有工作丢失,重新启动程序并回到原来的位置最多只需要一分钟),并且客户很快就会得到一个新版本(更新后的第三个-派对组件),我显然可以交叉手指,希望错误不会再次发生。

但我还能做些什么吗?

4

8 回答 8

28

是的。此错误是未映射到 .NET 错误的结构化异常。可能是您的 DataGrid 映射引发了未捕获的本机异常。

您可以通过查看ExternalException.ErrorCode属性来判断发生了什么异常。我会检查您的堆栈跟踪,如果它与 DevExpress 网格相关联,请将问题报告给他们。

于 2009-08-21T19:49:35.313 回答
8

当我的程序第一次使用本机 dll 包装器时,我遇到了类似的 SEHException 问题。结果发现该包装器的本机 DLL 丢失了。这个例外对解决这个问题没有任何帮助。最后有什么帮助是在后台运行 procmon 并检查在加载所有必要的 DLL 时是否有任何错误。

于 2013-07-11T08:45:03.047 回答
5

如果您遇到此帖子中描述的问题:

asp.net mvc 调试器抛出 SEHException

那么解决方案是:

如果您有来自 Trusteer 的任何应用程序(例如 rapport 或其他任何东西),只需卸载并重新启动您的系统,它就可以正常工作......在这里找到了这个解决方案:

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

于 2011-08-02T10:50:49.000 回答
3

组件制造商表示,这已在我们内部使用的最新版本组件中得到修复,但尚未提供给客户。

询问组件制造商如何测试客户遇到的问题是否是他们说他们已在最新版本中修复的问题,而无需/在将最新版本部署给客户之前。

于 2009-08-21T19:49:58.353 回答
1

当应用程序驻留在网络共享上时,我遇到了这个错误,并且设备(笔记本电脑,平板电脑,...)在应用程序正在使用时与网络断开连接。就我而言,这是由于 Surface 平板电脑超出了无线范围。安装更好的 WAP 后没有问题。

于 2017-03-03T21:17:27.073 回答
1

只是另一个信息......今天在 Windows 2012 R2 x64 TS 系统上遇到了这个问题,该应用程序是从 unc/network 路径启动的。针对所有终端服务器用户的一个应用程序出现此问题。在本地执行应用程序没有问题。重启后它又开始工作了——抛出的 SEHException 是 Constructor init 和 TargetInvocationException

于 2017-10-23T09:57:05.703 回答
0

我的机器配置:

操作系统:Windows 10 版本 1703 (x64)

我在 Visual Studio 2017 社区版中调试我的 C# .Net 项目时遇到了这个错误。我通过在运行时加载的 C++ 程序集上执行 p/invoke 来调用本机方法。我遇到了 OP 报告的相同错误。

I realized that Visual Studio was launched with a user account which was not an administrator on the machine. Then I relaunched Visual Studio under a different user account which was an administrator 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 some RCA but I see a possibility that the whole thing was failing as administrative privileges are required to write registry in Windows 10 operating system. So earlier when Visual Studio was running under a user account which didn't have administrative privileges on the machine, then the native calls were failing.

于 2018-02-21T12:42:29.020 回答
0

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.

于 2019-10-06T20:55:39.207 回答