我该如何修复一个在启动时崩溃并显示异常代码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个回答

0

我知道这是一个有点老的帖子,但我也遇到了这个问题,我正在创建一个c#/WPF应用程序。该应用程序在开发机器上运行良好,但在测试机器上无法启动。事件查看器中的应用程序日志给出了一个有些模糊的.NET Runtime错误:System.IO.DirectoryNotFoundException。

我尝试使用一些调试软件,但应用程序无法保持运行时间足够长,以便将调试器附加到进程上。在我的桌子上撞了一天的头,并查看了许多像这样的网页后,我最终为了解决这个问题,在我的测试机器上安装了VS2019。然后,我从其文件夹(它深藏在Users[user]\AppData\Apps\2.0...文件夹中)中拖动.exe文件到打开的VS2019实例中,并尝试从那里启动它。立即,它弹出一个对话框,显示异常和原因。

在我的情况下,当我向其中一个表单添加图标时,完整的图标路径被放置到XAML中,而不仅仅是图标名称。我已经将图标文件复制到项目文件夹中,但由于测试机上不存在项目文件夹,这就是错误的根本原因。然后我从XAML中删除了路径,只留下了图标名称,重新构建了解决方案并重新发布了它,现在在测试机上运行得非常好。当然,除了给我带来错误的原因之外,还有许多其他原因,但是这种故障排除方法应该能够确定错误的根本原因,因为Windows事件查看器给出了相对模糊的答案。
总之,使用测试机上的Visual Studio作为调试器。但是,为了使其正常工作,我必须将.exe文件拖入IDE中,并从那里启动(运行)它。我认为这也适用于VS2017以及VS2019。希望这可以帮助仍然遇到此问题的人。

0
在我的情况下,我遇到了内存不足的问题,并且我的Windows系统分页文件被禁用了。重新启用后,错误消失了。
为了更改分页文件设置:
  • 点击开始菜单,输入“高级系统设置”并按Enter键打开它。
  • 点击性能下面的设置按钮。
  • 切换到高级选项卡,然后在虚拟内存部分点击更改按钮。

0
当运行命令行应用程序时,它会立即退出,并且我在事件查看器中看到此异常,但没有收到任何其他反馈。 在我这种情况下,以管理员身份运行命令提示符解决了问题。
我认为其中一个要点就是,您可能会因权限问题而收到此异常。
几个小时后,我们遇到了新版本控制台应用程序的相同异常,但原因不同。 这次问题是由于dll版本不兼容引起的。使用所需的新dll版本解决了该问题。
也许这个通用错误出现是由于代码没有优雅地处理异常;最好的修复方法可能是至少处理异常以提供更好的错误消息。

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