代码之家  ›  专栏  ›  技术社区  ›  sgmoore

应该如何诊断错误sehexception-外部组件引发了异常

  •  75
  • sgmoore  · 技术社区  · 16 年前

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

    system.runtime.interopservices.sehexception(系统运行时.interopservices.sehexception) -外部组件引发了异常?

    作为一个程序员,我能做些什么来确定原因吗?

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

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

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

    讨论中的计算机似乎没有受到压力。它运行的是VistaBusiness,有2GB的内存,据任务管理器所说,我们的应用程序只使用了大约一半的内存,大约200MB。

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

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

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

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

    但是还有什么我能做的吗?

    7 回复  |  直到 8 年前
        1
  •  26
  •   Reed Copsey    16 年前

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

    您可以通过查看 ExternalException.ErrorCode 财产。我将检查您的堆栈跟踪,如果它绑定到devexpress网格,则将问题报告给他们。

        2
  •  6
  •   Maurice Gilden    12 年前

    我的程序第一次使用本机dll包装器时抛出的sehexception也有类似的问题。结果发现该包装的本机dll丢失。这个例外对解决这个问题毫无帮助。最终帮助的是在后台运行procmon,并检查在加载所有必要的dll时是否有任何错误。

        3
  •  5
  •   Community Mohan Dere    8 年前

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

    asp.net mvc debugger throwing SEHException

    那么解决方案是:

    如果您有来自Trusteer的任何应用程序(如Rapport或其他应用程序),只需卸载并重新启动系统,它就会正常工作…在此处找到此解决方案:

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

        4
  •  3
  •   ChrisW    16 年前

    组件制造商表示,我们在内部使用的最新版本的组件已经修复了这一问题,但这一问题已经提供给客户了。

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

        5
  •  1
  •   Brie    9 年前

    一个古老的问题,但对于谷歌:当应用程序驻留在网络共享上,并且设备(笔记本电脑、平板电脑等)在应用程序使用时与网络断开连接时,我遇到了这个错误。在我的例子中,这是由于一个平板电脑超出了无线范围。安装更好的WAP后没有问题。

        6
  •  0
  •   user8818528    8 年前

    只是另一个信息… 在Windows2012 r2 x64 ts系统中,应用程序是从一个UNC/网络路径启动的,现在出现了这个问题。所有终端服务器用户的一个应用程序出现问题。 在本地执行应用程序没有问题。重新启动后,它再次开始工作-引发的sehexception是constructor init和targetInvocationException

        7
  •  0
  •   RBT    8 年前

    我的机器配置:

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

    我在Visual Studio 2017 Community Edition中调试C.NET项目时遇到了此错误。我通过在运行时加载的C++程序集上执行P/Unjk来调用本机方法。我遇到了和OP报告的同样的错误。

    我意识到Visual Studio是用一个不是计算机管理员的用户帐户启动的。然后,我在另一个用户帐户下重新启动了Visual Studio,该帐户是计算机上的管理员。这就是全部。我的问题解决了,我没有再面对这个问题。

    需要注意的是,在C++程序集上调用的方法应该在注册表中写入很少的东西。我没有去调试C++代码来做一些RCA,但是我看到整个事情都失败了,因为管理权限需要在Windows 10操作系统中写入注册表。因此,早些时候,当Visual Studio运行时使用的用户帐户在计算机上没有管理权限,则本机调用失败。