应用程序在启动时崩溃,事件日志中的应用程序错误提供以下信息:
故障模块名称:KERNELBASE.dll,版本:6.2.15063.483,时间戳:0xc3955624
异常代码:0xe0434f4d
故障偏移量:0x000eb802
这是背景故事
在我们客户的一个网络上,我们的应用程序崩溃甚至无法打开。我现在已经花了几天时间寻找答案,但是还无法解决。我从一些基本的故障排除开始,在没有发现任何吸烟枪之后,但是发现新的用户配置文件解决了该问题,我建议这是重新启动并重新运行的好方法。他们的外包IT最初同意,但是在将用户数据迁移到新配置文件方面遇到困难,并且始终无法完成将受影响的用户迁移到新配置文件的工作。现在,问题出现在他们网络上的另一台计算机上,他们正在回覆指出问题出在我们的应用程序上,我们应该花点时间来解决它。我同意,如果它在我们的代码中,我们应该对其进行修复,但是到目前为止,它似乎还远远不够到达我们的代码。另外,除了在该网络上,这两个帐户都使用本地帐户登录到域PC之外,我们在其他任何地方都没有看到此消息。
应用信息
用户环境信息
到目前为止的疑难解答
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
问题
在我看来,在应用启动之前,似乎发生了未处理的CLR异常,这可能是由于文件或注册表项上的某些Windows权限冲突而引起的,但是我不知道如何进一步追踪它。
最佳答案
我能够解决此问题,因此该应用程序再次开始工作。并排比较两个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
关于vb.net - 在启动应用程序之前,如何确定Kernelbase.dll中未处理的异常导致AppCrash的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45338908/