【问题标题】:How to eliminate Unhandled Exception dialog produced by 3rd party application如何消除由 3rd 方应用程序产生的未处理异常对话框
【发布时间】:2025-12-21 04:15:17
【问题描述】:

我正在使用无法重新编译的第 3 方可执行文件(供应商不再可用)。它最初是在 .Net 1.1 下编写的,但在以后的版本中似乎也可以正常工作。我使用 Process.Start 从我自己的应用程序启动它(我也尝试过 p/invoke CreateProcess,结果相同,因此不相关)

不幸的是,这个第 3 方应用程序现在在退出时会引发未处理的异常。 Microsoft 对话框的标题类似于“从 v2.0 引发的异常 ...版本,没有帮助)。

退出时未处理的异常对话框不会引起任何实际问题,但对我的用户来说很麻烦,他们每次都必须单击“确定”才能将其关闭。是否有任何方法(可能是配置文件选项)禁用此对话框以显示我没有源代码的应用程序?我考虑将它加载到一个新的 AppDomain 中,这将使我能够访问 UnhandledException 事件,但没有迹象表明我可以更改对话框的外观。也许有人知道导致异常的原因,我可以通过其他方式解决这个问题?

【问题讨论】:

    标签: c# unhandled-exception


    【解决方案1】:

    您可以编写一个包装应用程序,直接调用第 3 方应用程序并使用 Process.Start 启动您的应用程序。

    然后在您的包装应用程序中捕获异常,以便用户不会看到错误消息。

    【讨论】:

      【解决方案2】:

      如果它没有被混淆,你可以反编译它吗?这当然是非法的等等,但如果公司真的破产了,那么没有人会去追究。如果你别无选择,你支持代码是合理的。

      Reflector 可能会为您提供代码崩溃原因的线索,也许您需要做一些事情或使用参数调用它以阻止它这样做?

      【讨论】:

        【解决方案3】:

        下次不要尝试使用没有源代码的东西:)

        一种解决方法是遵循 Chris 的建议。包装应用程序可以使用这样的代码,

        http://blog.jtbworld.com/2007/06/windows-live-writer-spell-checking.html

        1. 找到旧的应用程序可执行文件。
        2. 在包装应用程序中创建的 AppDomain 对象中执行它。
        3. 将您的应用程序未处理的异常处理程序绑定到此 AppDomain 对象的 UnhandledException 事件。

        http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

        【讨论】: