【问题标题】:What are the causes and solutions of exception code c0000005 in mscorwks.dll?mscorwks.dll中出现异常代码c0000005的原因及解决方法是什么?
【发布时间】:2010-12-28 23:00:33
【问题描述】:

当应用程序在使用测试完成启动的 Windows Server 2008 R2 上运行时,从 mscorwks.dll 引发异常代码 C0000005。其他平台(Windows XP、Server 2003 R2、Windows 7 32 位和 64 位)不存在此异常。

单次执行的事件日志中包含许多由 .NET 运行时引发的事件 ID 为 1023 的以下事件:

.NET 运行时版本 2.0.50727.4952 - 致命的执行引擎错误 (7383851A) (80131506)

应用程序本身使用由 Visual Studio 从 WSDL 文件生成的 SOAP 接口,这是一个具有嵌入式互操作的 COM 对象,并以 .NET 4 为目标。

sfc /scannow 已运行,发现受影响系统上的系统文件没有问题。

可以进行哪些故障排除来确定解决方案?

【问题讨论】:

    标签: c# exception windows-server-2008-r2 testcomplete mscorwks.dll


    【解决方案1】:

    致命的引擎执行错误和访问冲突都是同一问题的症状。当 .NET 垃圾收集器检测到垃圾收集堆的内部结构被破坏时,会引发 FEEE。访问冲突是一种硬件异常,由处理器在被要求访问具有无效地址的内存时引发。 AV 的一个常见原因是堆损坏。

    这类事故通常是由非托管代码引起的。非托管代码也很普遍存在潜在的内存管理错误,这些错误可能会在很长一段时间内被忽视。该错误可以造成的损害往往是非常随机的。只需在另一个具有不同内存分配模式的操作系统上运行它就足以触发炸弹。

    你有一个很好的人选作为问题的根源。您需要与 COM 服务器供应商或作者合作来解决该错误。

    【讨论】:

      【解决方案2】:

      0xC0000005 是一个包含 Win32 错误的异常代码,意思是“拒绝访问”。鉴于您正在使用 COM 互操作并且收到 ExecutionEngineException(在 COM 中,COR_E_EXECUTIONENGINE; 0x80131506),我的猜测是它要么是 COM 组件中的 NULL 指针,要么是您的 .NET 代码中的错误 ComImport 指令。

      【讨论】:

      • 异常代码不是 win32 错误代码不是 HRESULT 不是 NTSTATUS。对不起我的小毛病。
      • 我知道有人会大声疾呼。好的,好的,0xC0000005 是 Win32 错误。对应的 HRESULT 为 0x80070005。
      • 不是win32错误。这是一个异常代码。将 0xC0000005 输入到例如 FormatMessage 中,您将不会得到有用的结果。
      • 又被抓到了。但是,我在您发表评论之前对其进行了更改。此外,它是一个 Win32 错误,只是包装在一个 SEH 表单中(很像 HRESULT)。
      • 这是com互操作中的问题,但不是因为组件本身。这实际上是由正在使用的测试工具产品 test complete 7 引起的问题,它变得有点抢手并导致垃圾收集失败。我将为使用该产品遇到相同问题的人创建一个更简洁的答案,但感谢您的帮助,使我走上了正确的道路。
      【解决方案3】:

      此错误是由 TestComplete 7 与混合托管/非托管应用程序中的堆交互方式中的缺陷引起的。而不是使用TestedApp.Run 方法,而是使用以下代码块,为您选择脚本语言而修改,在VBScript 中呈现:

      Dim oScript, command
      Set oScript = CreateObject("WScript.Shell")
      
      command = "%comspec% /c " & PATH_TO_EXE & " " & Args
      oScript.Run command, 10, True 
      

      相关的MSDN 文章是Run Method (Windows Script Host)。

      【讨论】:

        【解决方案4】:

        TestComplete 7(包括最新更新 7.52)仅支持 .NET Framework 4 直到版本 .NET 4 Beta 2。它不支持 Framework 的发布版本,所以这可能是问题的原因。

        尝试构建面向 .NET 2.0 的应用程序。这应该可以解决问题。

        要测试 .NET 4 应用程序,您需要使用 TestComplete 8。

        【讨论】:

        • 我们知道 TestComplete 7 的 .Net 支持限制。我们目前正在迁移到 TestComplete 8,但以上是针对 .Net 4 兼容性问题的解决方法。跨度>
        猜你喜欢
        • 1970-01-01
        • 2014-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多