我该如何修复一个在启动时崩溃并显示异常代码0xE0434352的.NET Windows应用程序?

98

我在Visual Studio 2010中构建了一个.NET Windows Forms应用程序,同时也通过Visual Studio 2010构建了相应的安装包。这是作为32位(x86)应用程序构建的。(我们使用的第三方Windows Forms控件只支持32位)

我能够成功运行安装程序并将其部署到其他Windows 7 64位环境和32位Windows XP框中。这些已安装的应用程序在这些系统上运行良好。

然而,当我尝试运行Windows Server 2008 R2 - 64位时,该应用程序在启动时崩溃。它通过安装程序成功安装而没有任何错误。

似乎是在加载应用程序时崩溃。我在应用程序的第一行放置了一个消息框,以查看它是否已经过了加载。消息框没有显示出来,所以我认为它发生在应用程序的加载/初始化过程中。

到目前为止,我还没有找到什么有用的线索。从详细信息中我看到以下内容:

Exception Code: E0434352

我已经四处打听/谷歌搜索,看是否有任何明显的问题,但是什么都没有找到。我看到了一些可能是CLR中栈溢出的参考。

Windows窗体应用程序构建于以下引用基础之上:

  • DevExpress
  • Infragistics Winforms控件
  • ORACLE DataAccess DLL
  • RabbitMQ

问题在哪里? 我该如何处理以找出这个问题? 怎么调试来获取更多有用的信息?


这些引用中哪一个使用了非托管代码?运行 WinDbg,加载您的应用程序并查看是否输出了有关错误的任何信息。 - keyboardP
此外,如果它被证明是ORACLE模块,则可能相关:https://dev59.com/90vSa4cB1Zd3GeqPeXCv - keyboardP
4
消息框?认真的吗?去看看System.Diagnostics.Debug吧。 - H H
Debugger.Launch()会在运行该行代码时提示将进程附加到Visual Studio调试器,因此请将其放置在入口点附近,以便在启动时附加进程。 - Amicable
1
已经过了一段时间,但是 - 你成功解决了这个问题吗?我有一个客户报告了这种行为。在我们的开发机器上很难复现。请随意分享你的解决方案 - 我想这值得点赞。谢谢! - deafjeff
13个回答

110
如果您从事件查看器中收到该错误,请查看来源“.NET Runtime”中的另一个错误事件(至少一个)。查看该错误消息,因为它将包含“异常”信息。

enter image description here


7
谢谢,你的帮助真是太有用了。这样一来,我发现我缺少一个依赖项(文件未找到异常)。 - Pavel K

80

0xE0434352是所有.NET异常的异常代码,所以这并不能告诉你太多。你是如何得到这个异常代码的?事件日志吗?

你最好使用调试器来获取更多信息。如果Visual Studio调试器无法帮助你,那么你可能需要使用WinDbgSOS。请参见这里这里进行介绍。让它在异常上中断,并查看是否可以获得关于原因的更多信息。

如果你怀疑这是加载程序集时出现的问题,你可能需要检查Fusion Log


7
在尝试调试器之前,请检查Tergiver的回答。 - Reza Abolfathi

6

我不确定这是否对任何人有帮助,但既然这是我的问题,我认为值得一提:

我遇到了这个错误,结果证明它是由EXE构建的平台问题引起的。 我们已将其构建为x86,但需要x64,因为项目中有一个Oracle参考。 当我们进行了更改时,问题就消失了。 因此,请检查是否存在类似的冲突。


4

看起来这个错误代码0xe0434352适用于许多不同的错误情况。

如果有帮助的话,我遇到了这个错误,当时我正在尝试在新的Windows 10系统上安装我的应用程序。 它在其他计算机上运行良好,但看起来应用程序会在启动后立即停止。 经过多次尝试和错误排除,问题最终被确认是应用程序需要DirectX9。 尽管存在更新版本的DirectX,但它必须拥有9版本。 希望这能让有需要的人节省一些挫败感。


这是一个非常奇特的案例。不确定有多少人会遇到这种特殊情况。 - Eniola

3
我整整一天都在和这个问题斗争,让我的用户运行软件的调试版本。因为它看起来没有运行第一行代码,只是崩溃了,没有任何信息。
然后我意识到错误出现在表单的InitializeComponent中。
获得异常的方法是删除(或注释掉)这一行代码:
System.Diagnostics.DebuggerStepThrough()

一旦您删除该行,将会出现一个普通的异常。


2

问题:

.Net应用程序在开始执行之前中止[控制台应用程序或Windows应用程序]

收到的错误:使用错误代码“E0434352”中止

异常:未知异常

场景1:

当已经执行了一个应用程序,并且该应用程序已经使用了一些依赖资源,而这些资源仍然被执行的应用程序使用时,当从其他源触发另一个应用程序或相同的exe时,其中一个应用程序会抛出错误。

场景2:

当调度程序或自动作业触发应用程序时,它可能处于执行状态,同时当您尝试再次触发相同的应用程序时,可能会触发错误。

解决方案:

创建一个应用程序,在完成后立即释放所有资源 一旦应用程序关闭,就杀死所有后台进程 检查并避免同时从多个源(如批处理过程、任务计划程序和外部工具)执行应用程序。 检查应用程序和资源依赖关系,如果需要,请清理代码。


在我的情况下,应用程序文件夹或其中的文件被锁定/打开 - 因为系统不允许重命名它(检查文件夹和子文件夹是否空闲或打开/锁定的简单测试)。重新注销/登录服务器后,它会释放锁定。 - Kuleris
是的,我们之所以收到这个错误代码,是因为我们试图向已经忙碌的应用程序发送命令。 - AbstractVoid

2

当我部署应用程序时出现了这个问题。在我的情况下,我在项目安全选项卡上选择了“这是一个完全可信任的应用程序”,这样问题就得到了解决。


3
那可能不是真正的解决方案:你可能需要设置你的应用程序/其安全要求,以便在中等信任环境下正确运行。但那是一个有用的起点-感谢! - Rup

1
为了解决这个问题(因为一些应用程序突然开始抛出这个异常,例如CorelDraw X6),我卸载了.NET 4.5运行时并安装了.NET 4运行时。这两个版本不能并存,但它们在GAC中使用相同的版本号。这会导致问题,因为一些功能在4.5中已经过时。 DLL Hell回来了...

1
当我们的数据库连接字符串不正确时,出现了这个错误。找到解决方法的关键是运行 dotnet blah.dll,它提供了一个堆栈跟踪,告诉我们指定的 SQL Server 实例无法找到。希望这能帮助到某人。

0

所以...我在事件查看器中注意到这个崩溃对应了一个"System.IO.FileNotFoundException"错误。

于是我启动了ProcMon,发现其中一个程序dll无法加载vcruntime140。所以我简单地安装了vs15 redist,问题得以解决。


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