w3wp.exe 中发生了未处理的 Win32 异常

15
尝试加载ASP.NET MVC网站时,遇到以下异常:

在w3wp.exe的0x07070a91处发生未处理的异常:0xC0000005:访问位置0x00000000时出现访问冲突。

Visual Studio Just-In-Time调试器打开,调试器中唯一可见的信息是:

调用堆栈位置:

msvbvm60.dll!06c00a91()

该网站使用一些COM对象,一切都运行良好,直到上周出现这个问题。这个问题突然出现了。
以下是Windows事件查看器中的错误日志:

故障应用程序名称:w3wp.exe,版本:7.5.7601.17514,时间戳:0x4ce7a5f8
故障模块名称:MSVBVM60.DLL,版本:6.0.98.15,时间戳:0x4a5bda6c
异常代码:0xc0000005
故障偏移量:0x00030a91
故障进程id:0x1a0
故障应用程序启动时间:0x01cd31fcb47f66d8
故障应用程序路径:C:\Windows\SysWOW64\inetsrv\w3wp.exe
故障模块路径:C:\Windows\system32\MSVBVM60.DLL
报告ID:f5db0ae3-9def-11e1-ad79-005056c00008

您有什么建议可以帮助解决这个问题吗?
编辑:我设法解决了问题,现在一切都正常。解决方案涉及调整一些自定义dll需要的注册表设置,以确保其正常运行。所以问题并不是突然出现的,只是我没有意识到某些注册表值被修改,导致com dll崩溃。

你调用的是自定义 COM 对象吗? - Steve Danner
MSVBVM60是VB6运行时dll。我猜测是将完全信任更改为部分信任的情况。 - ggonsalv
8个回答

18

在IIS Manager中打开为应用程序提供服务的应用程序池的高级设置对话框,并设置:启用32位应用程序True


在微软论坛上徒劳地搜索了一个多小时并尝试使用IIS调试诊断工具后,我终于找到了解决方法。这是一个非常奇怪的问题。 - Isaac Lyman
这也解决了我的问题。此外,我发现将该设置更改为True,然后立即再次将其设置为false也可以解决问题,但只能维持一段时间...我每天都要这样做...这有点烦人。@IsaacLyman你遇到这个问题多久了?对我来说,它是在上周五开始出现的,以前从未遇到过这种情况。我怀疑是Windows更新出了问题... - Marc-Andre R.
1
@Marc-AndreR。一个有问题的Windows更新是很有可能的。我只在几天前开始遇到这个问题。我点击了“设置应用程序池默认值”,将设置更改为True(这将永久更改所有我的应用程序池),自那以后我就没有遇到任何问题了。 - Isaac Lyman
嗨,这解决了我的问题。非常感谢。您能解释一下这个技巧是如何工作的,以及抛出这个错误的原因吗? - Ajith
1
嗨@Ajith,当您以发布模式发布应用程序时,默认情况下会构建x86架构,并且在64位Windows中默认情况下IIS启动工作进程为64位。我还没有测试过AnyCPU构建。 - undefined

12
您提供的信息不足以确定根本原因,但如果您可以提供更多关于异常的信息,可能会得到这种失败的确切原因。您要求解决此问题的建议,因此以下是建议:
您可以使用以下三个工具之一来解决此问题:
1. IIS Debug诊断工具v1.2
这里有更多关于如何使用此工具的信息: http://support.microsoft.com/kb/919790 2. DebugDiag
使用下面的链接了解如何将w3wp进程(它是用户模式进程)与DebugDiag挂钩并收集有关崩溃的更多信息: http://msdn.microsoft.com/en-us/library/ff420662.aspx 3. WinDBG
这是一个链接,将帮助您在WinDBG中加载W3WP进程,并使用一些命令提取有关崩溃的更多信息: http://blog.whitesites.com/Debugging-Faulting-Application-w3wp-exe-Crashes__634424707278896484_blog.htm 一旦您了解了更多有关异常的信息,您可以添加上述内容并获得及时帮助。

3

请按照以下步骤操作:

1)将Temp和%temp%文件夹的权限设置为完全控制。

2)进入应用程序池属性,将“启用32位应用程序”改为true。


我认为是%temp%文件夹的完全访问权限造成了这个问题。谢谢。 - Steve Tolba

2
在我的情况下,一个名为“Web Companion”的程序被安装了。
卸载它之后,问题得到解决。

2
您可以在此问题再次发生时开始捕获崩溃转储。

http://support.microsoft.com/kb/2580960

使用 Debug Diag 1.2 正确设置崩溃规则是第一步。
一旦您获得了转储文件,如果您熟悉转储分析,可以使用 Windows 调试工具中的 WinDbg 进行分析。
如果您无法进行分析,我的建议是通过 http://support.microsoft.com 开启支持案例,并与 Microsoft 支持工程师分享转储文件。

0

我的解决方案是,如果你想在64位上构建它:

调试 ==> 选项 ==> 搜索 iis ==> 启用使用64位版本的 IIS Express


0

当我将WebAPI 7.0发布到Windows 10企业版的IIS时,下面的方法解决了我的问题:

  1. 打开IIS。
  2. 进入你的应用程序池。
  3. 右键点击 -> 高级设置...
  4. 在进程模型下,将标识更改为“LocalSystem”,而不是“ApplicationPoolIndentity”。
  5. 重新启动IIS。

-1
在我的情况下,这是因为代码中有一个无限循环

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接