0

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

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

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

4

3 回答 3

2

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

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

于 2010-03-22T20:39:14.040 回答
0

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

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

于 2010-03-22T20:39:56.650 回答
0

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

一种解决方法是遵循 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

于 2010-03-23T03:21:01.520 回答