什么会导致任何.NET应用程序立即崩溃...除了我在Visual Studio中创建和调试的项目?

问题描述 投票:19回答:14

我的软件最近部署到一位客户,他说该应用程序在启动后立即崩溃。经过一些初步调试后,客户为我提供了远程访问其中一台无法运行该应用程序的计算机。我发现崩溃并不是我的应用程序特有的。任何依赖于.NET框架的应用程序都会立即崩溃。

方便的是,安装了Visual Studio 2008,因此我在其上创建了一个快速的hello world应用程序,然后单击Debug。该应用程序工作正常。但是,当我试图在visual studio之外的/bin/Debug/HelloWorld.exe目录中执行生成的二进制文件时,它崩溃了。

我试过的东西清单(更新):

  • 我检查了“Everyone”对c:\ Windows的读取和执行权限。
  • 为了测试问题出在.NET Framework(而不是我的应用程序)上,我试图将Paint .NET下载到计算机上。设置前端以相同的方式崩溃。
  • 执行了http://support.microsoft.com/kb/908077中概述的.NET框架的修复(男孩这很有趣且耗时)。没运气。
  • 安装.NET 3.5 SP1(之前它只有.NET 3.5)注意:我的应用程序的目标是2.0所以我做了更多的远程...但我在过程中了解到.NET 3.5 SP1也更新了底层框架。
  • Ran Aaron Stebner's .NET Setup Verification Tool。该工具表明.NET已成功安装。 (我忘记了如果我检查了所有版本,但至少2.0工作)。
  • 测试了一些针对.NET 2.0和.NET 3.5的迷你hello world应用程序,并且两者都以相同的方式崩溃。
  • 尝试通过windbg cmd行启动.NET应用程序。这样做允许我调用我的简单hello world应用程序。因此,简单的.NET hello world可以在windbg调用时使用,也可以在visual studio中通过debug启动...但如果我尝试独立执行它,则不会。

我使用WinDbg创建了一个转储文件。对我来说,这并不是一切。

FAULTING_IP:  mscorwks!PEImage::GetEntryPointToken+21 79f4ff9d f6401010        test    byte ptr [eax+10h],10h

EXCEPTION_RECORD:  0012f710 -- (.exr 0x12f710) ExceptionAddress: 79f4ff9d (mscorwks!PEImage::GetEntryPointToken+0x00000021) ExceptionCode: c0000005 (Access violation)   ExceptionFlags: 00000000 NumberParameters: 2    Parameter[0]: 00000000    Parameter[1]: 00000010 Attempt to read from address 00000010

FAULTING_THREAD:  00000b44
PROCESS_NAME:  MyProcess.exe
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION}  Breakpoint  A breakpoint has been reached.

EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid    
DETOURED_IMAGE: 1    
NTGLOBALFLAG:  0    
APPLICATION_VERIFIER_FLAGS:  0    
MANAGED_STACK: !dumpstack -EE OS Thread Id: 0xb44 (0) Current frame:  ChildEBP RetAddr  Caller,Callee

EXCEPTION_OBJECT: !pe cb10b4 Exception object: 00cb10b4 Exception type: System.ExecutionEngineException Message: <none> InnerException: <none> StackTrace (generated): <none> StackTraceString: <none> HResult: 80131506    
MANAGED_OBJECT_NAME:  System.ExecutionEngineException    
CONTEXT:  0012f72c -- (.cxr 0x12f72c) eax=00000000 ebx=00000000 ecx=00000000 edx=0000000e esi=001a1490 edi=00000001 eip=79f4ff9d esp=0012f9f8 ebp=0012fa1c iopl=0         nv up ei pl zr na pe nc cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010246 mscorwks!PEImage::GetEntryPointToken+0x21: 79f4ff9d f6401010        test    byte ptr [eax+10h],10h     ds:0023:00000010=?? Resetting default scope    
READ_ADDRESS:  00000010     
FOLLOWUP_IP:  mscorwks!PEImage::GetEntryPointToken+21 79f4ff9d f6401010        test    byte ptr [eax+10h],10h    
BUGCHECK_STR:  APPLICATION_FAULT_NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN    
PRIMARY_PROBLEM_CLASS:  NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN
    DEFAULT_BUCKET_ID:  NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN    
LAST_CONTROL_TRANSFER:  from 79ef02b5 to 79f4ff9d    
STACK_TEXT:   79f4ff9d mscorwks!PEImage::GetEntryPointToken+0x21 79ef02b5 mscorwks!PEFile::GetEntryPointToken+0xa0 79eefeaf mscorwks!SystemDomain::ExecuteMainMethod+0xd4 79fb9793 mscorwks!ExecuteEXE+0x59 79fb96df mscorwks!_CorExeMain+0x15c 7900b1b3 mscoree!_CorExeMain+0x2c 7c817077 kernel32!BaseProcessStart+0x23    

SYMBOL_STACK_INDEX:  0    
SYMBOL_NAME:  mscorwks!PEImage::GetEntryPointToken+21    
FOLLOWUP_NAME:  MachineOwner    
MODULE_NAME: mscorwks    
IMAGE_NAME:  mscorwks.dll    
DEBUG_FLR_IMAGE_TIMESTAMP:  471ef729    
STACK_COMMAND:  .cxr 0012F72C ; kb ; dds 12f9f8 ; kb    
FAILURE_BUCKET_ID:  NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN_80000003_mscorwks.dll!PEImage::GetEntryPointToken    
BUCKET_ID:  APPLICATION_FAULT_NULL_CLASS_PTR_DEREFERENCE_SHUTDOWN_DETOURED_mscorwks!PEImage::GetEntryPointToken+21    
WATSON_STAGEONE_URL:  http://watson.microsoft.com/StageOne/MyProcess_exe/2_4_4_39/4a8a192c/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1

Followup: MachineOwner

编辑1:此错误的事件日志详细信息说它是.NET运行时版本2.0.50727.3053 - 致命执行引擎错误(7A097706)(80131506)。

DotNetFatalExecutionErrorScreenshot (来源:blakerobertson.com

编辑2(10-7-09):此问题仍然有效。

编辑3(3-29-10):此更新是为了让每个人都知道我从未成功解决问题。机器的客户对解决问题失去了兴趣并且只是重新成像机器:(。感谢所有的贡献。

.net visual-studio-2008 crash-dumps
14个回答
8
投票

基于你的windbg输出,看起来有人在进程启动时将一个DLL注入到进程中,并且注入不是针对已加载的任何版本的mscorwks设计的。如果这是一个休闲工作站(例如秘书),我会没收MIS / IT来检查恶意软件。如果它是一台坐在服务器房间的机器,我会向客户寻求重新安置到另一台机器。

我不怀疑这会发生在任何其他客户身上,并且在8年的.NET开发中,唯一能够(预期)导致您所描述的行为的事情是尝试在具有较旧版本的系统上运行.NET应用程序安装的框架版本(例如缺少支持,导致大多数Windows版本的标准调试/取消对话框),这不是这个问题。这也与处理器架构,框架版本和SP级别无关,它与任何商业AV软件或任何商业网络安全软件无关。

它显然不是你代码中的东西,我不认为它是你可以为你的客户修复的东西。我知道没有工具或一系列步骤可以用来解决这个问题,而不是让客户重新映像目标机器。在他们这样做之前,再次让MIS / IT对潜在的恶意软件(特别是不会通过公众分发的恶意软件)发出幻想。

相关阅读:http://research.microsoft.com/apps/pubs/default.aspx?id=68568

祝好运。


0
投票

使用WinDbg启动它。使用罢工之子你应该能够确切地看到它崩溃的原因。可能存在低级装配负载错误。我在过去使用WinDbg遇到了类似的问题。


0
投票

确保用户未从网络共享启动应用程序。默认情况下,.Net在尝试从不受信任的源启动应用程序时会引发安全性异常。

您可以使用“管理工具”中的Microsoft .Net Framework配置实用程序更改此行为。


0
投票

因为它不会发生在每台客户端机器上,它可能是RAM吗?你可以重启坏机并运行内存诊断工具吗?

在过去的某个时刻DEP可以为这台机器打开吗?你不会得到这种安全性的.Net异常,因为你的应用程序根本无法运行,所以几乎没有机会抛出错误。


0
投票

可能是这个链接可以帮助您解决您的问题Microsoft .NET Application Crashes

您的客户PC安装了哪些操作系统(Windows XP,Vista等)?

您是否尝试完全卸载.NET Framework(而不是修复)然后重新安装它?


0
投票

我最近遇到了一个以非常类似的方式表现出来的问题。事实证明,某些第三方DLL不属于我的部署(我只是从bin目录中复制东西)。我创建了一个安装应用程序来获取所有DLL,一旦正确部署它,它就会停止崩溃。奇怪的是,这是一次艰难的失败,而不是一次例外。

这可能不适用于您,因为您说它适用于任何.NET应用程序。也许你正在使用一些旧的项目文件和一些剩余的引用?


3
投票

我们团队的一些成员最近遇到了同样的问题,他们发现在通过Wave System卸载qazxsw poi之后,一切都恢复了正常。以下链接导致了答案。

Embassy Trust Suite

作为调查的一部分,他们也发生了这个SO问题,并要求我发布这个可能的解决方案,可能会帮助其他人。


1
投票

我们在大规模部署中遇到了一个非常类似的问题,在所有情况下运行修复框架修复了我试试的问题。


1
投票

几个月前我遇到了类似的问题(虽然我不记得错误代码)。在尝试了很多东西之后,以下解决了这个问题(据我所知):

删除.net临时文件夹中的所有临时文件(并检查该文件夹的权限)


1
投票

有相同的问题,并通过使用发布向导修复它。这就是我发现目标机器没有安装Visual Basic Powerpack 3.0软件包的方法。安装后,它就像一个魅力。


1
投票

我最近有同样的问题,并做了这些步骤http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/6e6b8496-c1f1-4fc9-bcc9-2129a6329804/,它纠正了.NET应用程序没有目的崩溃


0
投票

听起来你在那里给自己一个“有趣”。我一点都不知道,但无论如何,这是我的业力骚扰暗示。

1)除了Windows分配的常规用户权限外,还有一组专门用于.NET框架的安全设置。如果安装了.NET SDK,请在“控制面板”中查找“Microsoft .NET Framework配置”工具(可能位于“管理工具”下)。查看您的开发机器中的任何设置是否有所不同。

2)我猜你的客户在他工作场所的IT制度下大拇指。看看您或您的客户是否可以在程序运行的全新Windows安装上,然后与他的IT团队合作,一次应用他们的一个要求(安全设置,防病毒程序等),直​​到您的程序停止工作。一个好老的最后工作状态bug-hunt。当然,这假设他的IT部门合作,所以我希望你的计划对某个行政人员来说很重要。


0
投票

没有银弹修复,我不认为这是一个许可问题。

这是我会尝试的

  1. 如果是64位机器尝试并切换到32位模式,我已经看到32位dll试图以64位运行。
  2. 在服务器上创建一个新网站并在其上运行aspnet_regiis。
  3. 卸载并重新安装2.0和3.5框架。完成后,请确保并运行aspnet_regiis

0
投票

尝试更多建议:

  • 为了确保它不是vshost.exe问题,我会尝试在cdb / windbg下运行MyProcess.exe并查看行为。
  • 这个问题看起来像是一个Read AV,如果应用程序在调试器下正常工作,我会尝试修复我的.Net安装,以防可能在操作系统处理器执行.Net程序集的方式损坏mscorwks.dll。
© www.soinside.com 2019 - 2024. All rights reserved.