System.Diagnostics.Process.Exited事件是否始终触发?

时间:2011-11-16 14:31:00

标签: c# process c#-2.0

我有一个我正在编写的应用程序通过COM连接与第三方程序通信。我的任务是加强应用程序的重新安全性,为此,我等到第三方应用程序准备就绪。我这样做是通过等待一个方法的返回值,该方法仅在第三方应用程序完全加载时返回true。

为了避免应用程序在此过程中崩溃的情况,我的应用程序只是坐在那里等待抛出COM错误(当然被捕获)我想知道过程本身的退出事件是否保证始终发生?

我更愿意在可能的情况下提供更多细节。 我目前仅限于使用当前版本的.NET Framework 2.0。

1 个答案:

答案 0 :(得分:1)

这取决于崩溃的类型 - 一些崩溃将“进程”留在内存中(例如只是卡在一些永不停止的循环中或者COM对象打开一些模态错误对话框并等待用户)......这些情况不在您的说明中提到的任何方法的涵盖范围内......

根据我的经验,你需要一个组合:

  • 挂钩Exited事件(如果您通过Process启动了应用程序)或找到进程ID并监视
  • 捕获该COM对象的任何异常
  • 为调用该COM对象/应用程序实现超时+中止逻辑
  • “监控”COM对象/应用程序 我通常在调用这样一个COM对象之前启动一个单独的线程...该线程监视COM对象/应用程序,例如,如果它打开任何不应该的窗口,或者当它不应该等时,内存消耗会通过屋顶。监控的事情以及对每个事件的反应都与COM对象/应用程序相关......