应用程序在启动时崩溃,事件日志中的应用程序错误提供以下信息:
错误模块名称:KERNELBASE.dll,版本:6.2.15063.483,时间戳:0xc3955624
例外代码:0xe0434f4d
故障偏移:0x000eb802
这是背景故事
在我们的一个客户网络上,我们的应用程序在打开之前就崩溃了。我现在花了几天时间寻找答案,而且还没有能够解决这个问题。我从一些基本的故障排除开始,在没有找到任何吸烟枪,但发现一个新的用户配置文件解决了这个问题之后,我建议这是一个很好的修复,可以重新启动并重新运行。他们的外包IT一开始就同意了,但是很难将用户数据迁移到新的配置文件,并且从未能够将受影响的用户移动到新的配置文件。现在问题发生在他们网络上的另一台机器上,他们正在推回说明问题出在我们的应用程序上,我们应该花时间来修复它。我同意,如果它在我们的代码中我们应该修复它,但到目前为止它似乎还远远不足以达到我们的代码。此外,我们还没有在其他任何地方看到这个,除了在这个网络上有两个帐户登录到具有本地帐户的域PC。
应用信息
用户环境信息
到目前为止的疑难解答
使用ProcMon监控应用程序崩溃,Process Outits之前的最后一行是Operation QueryNameInformationFile 到 C:\ Windows \ System32 \ ntdll.dll 结果为 SUCCESS 。我让ProcMon日志正常运行(崩溃)并运行Elevated(没有崩溃)。我试图比较,但有成千上万的条目,没有什么真正突出的原因。
研究并使用了一些调试工具来收集更多数据,包括ProcMon,ProcDump和WinDbg。到目前为止,我在这里找到的唯一的东西是相同的kernelbase.dll异常信息,但只提供代码,没有有意义的消息。我在加载符号时遇到了问题,但我想我已经明白了。我是WinDbg的新手,所以我可能没有100%拨打它。我无法使用 .loadby sos clr 成功加载CLR。我不得不使用 .load C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ SOS.dll 来加载SOS,甚至尝试 c:\ windows \ Microsoft.NET \ Framework \ v4.0.30319 \ clr.dll ,但我仍然只获得编码的异常信息,并且没有简单的英文消息。这是我在使用ProcDump
加载转储文件后在WinDbg中使用.excr时得到的结果eax=01fcf898 ebx=e0434f4d ecx=00000001 edx=00000000 esi=01fcf928 edi=022da1e0
eip=7453b802 esp=01fcf898 ebp=01fcf8f0 iopl=0 nv up ei pl nz ac po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000212
KERNELBASE!RaiseException+0x62:
7453b802 8b4c2454 mov ecx,dword ptr [esp+54h] ss:002b:01fcf8ec=0911506f
我尝试在WinDbg中使用!clrstk,但它说"没有找到导出clrstk"
问题
对我而言,似乎在应用启动之前发生了未处理的CLR异常,可能是因为某些Windows权限在文件或注册表项上发生冲突,但我不知道如何进一步追逐它。
答案 0 :(得分:2)
我能够解决这个问题,以便应用程序重新开始工作。在并排比较两个ProcMon日志(一个来自崩溃的配置文件,一个来自具有相同权限的新配置文件)后,我发现在崩溃的配置文件中,它很早就开始引用apphelp.dll并查看注册表中的AppCompatFlags键。这让我相信它试图以兼容模式运行,这是不应该做的。
即使我通过右键单击应用程序图标并查看属性确保没有通过UI设置兼容性模式,但仍有一些记录存储在注册表中。我从以下密钥中删除了应用程序的条目,并将用户退出并重新登录,问题已经消失。公平地说,我做了一些其他可能有所贡献的事情。我下载并运行了.NET Repair Tool。它在运行之后没有立即解决问题,但我想如果它起到了作用,我就提起它了。我首先运行修复工具包,然后找到并删除了注册表项,然后将用户注销并重新登录。
最终,我不确定是什么原因导致这种情况发生,但从我读到的内容来看,应用程序可能崩溃了一次,Windows尝试对其进行一些兼容性故障排除并将一些密钥存储在注册表中,最终导致崩溃。
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted