首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在应用程序启动之前,如何确定AppCrash在Kernelbase.dll中未处理异常时的原因?

在应用程序启动之前,如何确定AppCrash在Kernelbase.dll中未处理异常时的原因?
EN

Stack Overflow用户
提问于 2017-07-26 23:16:17
回答 2查看 4.2K关注 0票数 3

应用程序在启动时崩溃,事件日志中的应用程序错误提供了以下信息:

故障模块名称: KERNELBASE.dll,版本: 6.2.15063.483,时间戳: 0xc3955624

异常代码: 0xe0434f4d

故障偏移: 0x000eb802

,这是背景故事,

在我们的一个客户网络上,我们的应用程序甚至还没能打开就崩溃了。我已经花了好几天时间寻找答案,还没能解决这个问题。我从一些基本的故障排除开始,在没有发现任何冒烟的枪之后,我发现一个新的用户配置文件解决了这个问题,我认为这是一个很好的修复方法,可以重新恢复并运行。他们的外包IT最初同意了,但在将用户数据迁移到新配置文件时遇到了困难,而且从未能够完成将受影响的用户迁移到新配置文件。现在,这个问题发生在他们网络上的另一台机器上,他们说问题出在我们的应用程序上,我们应该花时间去修复它。我同意,如果它在我们的代码中,我们应该修复它,但到目前为止,它似乎还不够远,达到我们的代码。另外,我们在其他任何地方都没有看到这种情况,只有在这个网络上,有两个帐户登录到带有本地帐户的域PC上。

应用程序信息

  • VB.NET Windows窗体应用程序,目标是.NET 4.5
  • 是的,在UnhandledException文件中存在一个应用程序事件处理程序。

用户环境信息

  • 域网络,在域PC上,但使用具有本地管理员帐户类型的非域本地帐户登录。受此影响的两个用户都使用本地帐户登录。到目前为止,这并不影响使用域帐户登录的任何人。 编辑:更正,这是发生在第二个PC实际上并没有加入到该领域。
  • 工作站正在运行Windows10Pro v1703并更新当前
  • 如果运行提升,应用程序将很好地启动,但这会导致其他问题,因此让它们始终作为管理员运行是不可接受的解决方案。
  • 应用程序在这台PC上运行良好,直到最近更新。
  • 这个问题不会发生,如果我们登录一个新的域或非域帐户与或没有本地管理权限。它似乎只与看到问题的特定用户配置文件有关。

迄今对的疑难解答

  • 在线阅读数十篇处理kernelbase.dll崩溃的帖子,但找不到一个修复程序有效的
  • 卸载和重新安装应用程序
  • 使用添加/删除Windows组件卸载和重新安装.NET
  • 在Application.Startup事件中添加了一些事件日志条目,并在Splash屏幕和启动窗体上添加了Load事件,以查看我们是否达到了那么远。在工作站和测井上测试这一点是成功的。在受影响的机器上,不会发生日志记录,因此似乎在Application.Startup事件发生之前就发生了崩溃。
  • 在应用程序崩溃时使用ProcMon进行监视,进程退出前的最后一行是操作QueryNameInformationFile to C:\Windows\System32\ntdll.dll,这是成功的结果。我有正常运行的ProcMon日志(在崩溃的情况下)和运行提升的日志(没有崩溃)。我试过比较,但有数以千计的条目,没有什么真正突出的原因。
  • 研究和使用了一些调试工具来收集更多的数据,包括ProcMon、ProcDump和WinDbg。到目前为止,我在这里发现的唯一东西是相同的kernelbase.dll异常信息,但是只提供了代码,没有任何有意义的消息。我在装符号的时候出了点问题,但我想我明白了。我是WinDbg的新手,所以我可能不会在100%的时间内拨号。我无法使用.loadby sos成功地加载clr。我不得不使用这项工作来加载SOS,使用C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.dll,甚至尝试了c:\windows\Microsoft.NET\Framework\v4.0.30319\clr.dll,,但是仍然只能获得编码的异常信息,没有简单的消息。以下是在加载使用.excr生成的转储文件之后在WinDbg中使用ProcDump时所得到的信息 eax=01fcf898 ebx=e0434f4d ecx=00000001 edx=00000000 esi=01fcf928 edi=022da1e0 eip=7453b802 esp=01fcf898 ebp=01fcf8f0 iopl=0 nv up ei nz ac po cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000212 KERNELBASE!RaiseException+0x62: 7453b802 8b4c2454 mov ecx,dword ptr efl=00000212
  • 我试过在WinDbg中使用!clrstk,但它说“找不到出口clrstk”

问题

在我看来,在应用程序启动之前出现了一个未处理的CLR异常,可能是因为某个文件或注册表条目上的一些windows权限冲突,但我不知道如何进一步跟踪它。

  • 如何才能找到更多关于正在发生的特定异常的信息?我找不到kernelbase.dll在线的故障偏移码列表。
  • 我还能查到什么?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-29 08:09:42

我能够修复这个问题,所以这个应用程序又开始工作了。在比较了两个ProcMon日志(一个来自崩溃的概要文件,另一个来自具有相同权限的新配置文件)之后,我发现在崩溃的配置文件上,它很早就开始引用apphelp.dll并查看注册表中的AppCompatFlags键。这让我相信它试图在兼容性模式下运行,这是它不需要做的。

尽管I通过右键单击应用图标并查看属性来确保在UI中没有设置兼容性模式,但是仍然有一些记录存储在注册表中。我从下面的键中删除了该应用程序的条目,并将用户登出并重新登录,问题已经解决。说句公道话,我还做了一些其他的事情,这也可能是我的贡献。我下载并运行了.NET修复工具。它没有在运行后立即解决这个问题,但我想我应该提一下,以防它起作用。我首先运行了修复工具包,然后找到并删除了注册表条目,然后将用户注销并重新登录。

最终,我不太清楚是什么导致了这种情况的发生,但从我所读到的来看,这个应用程序可能曾经崩溃过一次,而Windows试图对其进行一些兼容性故障排除,并将一些键存储在注册表中,最终导致崩溃。

代码语言:javascript
运行
复制
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted
票数 2
EN

Stack Overflow用户

发布于 2022-09-14 14:48:44

在我的例子中,异常代码将我引导到异常代码: 0xe0434f4d

正如在文章中提到的,诀窍在于安装了.net框架版本和app.config中的supportedRuntime键。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45338908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档