如何修复.NET的Windows应用程序在启动时崩溃exception代码:0xE0434352?

我在Visual Studio 2010中构build了一个.NET Windows Forms应用程序。我还通过Visual Studio 2010构build了一个相应的安装/安装软件包。它构build为一个32位(x86)应用程序。 (我们使用的第三方Windows窗体控件只有32位)。

我能够运行安装程序包并成功地部署到其他Windows 7 64位环境和32位Windows XP机器。 安装的应用程序在这些上运行良好。

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

加载应用程序时似乎崩溃。 我把一个消息框作为应用程序的第一行,看看它是否过去加载。 消息框不显示,所以我假设它发生在应用程序的加载/初始化过程中。

到目前为止,我还没有发现很多事情要继续下去。 从细节我看到以下内容:

Exception Code: E0434352 

我search了一下,看看有没有什么明显的,但我什么都看不到。 我在CLR中看到了一些对可能的堆栈溢出的引用。

Windows窗体应用程序使用以下引用进行构build:

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

有什么问题? 我如何解决这个问题呢? 如何debugging以获取更多有用的信息?

0xE0434352是所有.NETexception的exception代码,所以不会告诉你很多。 你是怎么得到这个exception代码的? 事件日志?

您最好的select是使用debugging器来获取更多信息。 如果Visual Studiodebugging器不能帮助您,那么您可能需要使用SOS检出WinDbg 。 看到这里和这里的介绍。 让它打破例外,看看你是否可以得到更多的信息,为什么。

如果您怀疑加载程序集时出现问题,则可能需要检查Fusion Log 。

如果您从事件查看器中获取该错误,则应该看到源“.NET运行时”中的另一个错误事件(至less一个)。 看看那个错误信息,因为它将包含Exception信息。

0xE0434352的简要解释是在博客文章为什么我不断得到exception代码e0434352? 就像通过WinDbg和cdb进行debugging一样。

我在这一整天都在争取让用户运行软件的debugging版本。 因为它看起来没有运行第一行。 只是没有信息的崩溃。

然后我意识到错误是在窗体的InitializeComponent中。

获取exception的方法是删除这一行(或注释掉):

 System.Diagnostics.DebuggerStepThrough() 

一旦你摆脱了线,你会得到一个正常的例外。

我在应用程序部署时得到了这个。 就我而言,我在项目安全选项卡上select了“这是一个完全信任的应用程序”,并修复了这个问题。

它看起来像这个错误0xe0434352适用于一些不同的错误。

万一它有助于任何人,当我试图安装我的应用程序在新的Windows 10安装时,我遇到了这个错误。 它在其他机器上工作,看起来像应用程序暂时会开始临死前。 经过多次反复试验,结果问题是该应用程序需要DirectX9。 尽pipe有更高版本的DirectX版本,但它必须具有版本9.希望能够省却一些挫折。

为了解决这个问题(因为一些应用程序开始突然抛出这个exception,例如,CorelDraw X6就是其中之一),我卸载了.NET 4.5运行时并安装了.NET 4运行时。 这两个版本不能并排安装,但在GAC中使用相同的版本号。 这导致了一些问题,因为一些function已经在4.5中折旧了。

DLL地狱已经返回…

当连接string到我们的数据库是不正确的,我们去这个错误。 解决这个问题的关键是运行dotnet blah.dll,它提供了一个stacktrace向我们显示指定的sql server实例找不到。 希望这有助于某人。

所以..我已经注意到在事件查看器,这个崩溃相当于一个“System.IO.FileNotFoundException”错误。

所以我解雇了ProcMon并注意到其中一个程序dll无法加载vcruntime140。 所以我只是安装vs15 redist,它的工作。

我不确定这是否会帮助任何人,但是由于这是我的问题,所以我觉得值得一提的是:

我得到这个错误,并且它是EXE被构build的平台的一个问题。 我们已经为x86构build了它,并且由于项目中的Oracle引用,它需要为x64。 当我们做出改变时,问题就消失了。 那么,看看你是否有类似的冲突。