如何恢复对已重新启动的进程的引用?

时间:2009-08-04 22:38:56

标签: c# .net internet-explorer firefox process

使用Process.Start,我正在启动各种IE8和Firefox(3.5)进程,我保留了一个Process实例。

稍后在应用程序中,我将使用Process实例的MainWindowHandle属性来定位窗口,以便通过P / Invoke使用某些平台API函数。

然而,IE8和Firefox都会杀死我启动的第二个进程,然后使用第一个重启它。这意味着我的Process实例现在引用一个已关闭的进程,因此HasExited为true且MainWindowHandle等于IntPtr.Zero。

这是一个发生了什么的例子(我在这个例子中使用的是IE8):

  • 使用“iexplore.exe”
  • 调用Process.Start
  • 流程开始并继续运行
  • 使用“iexplore.exe”
  • 再次调用Process.Start
  • 第一个进程继续运行,但第二个进程立即被终止
  • 启动了另一个iexplore流程(可能是第一个iexplore流程)。
  • 在此期间,用户只有在第二个进程被终止并重新启动后才能看到第二个IE窗口。

我理解为什么这些浏览器会以这种方式运行,但如果我想稍后控制创建的进程,它确实给我带来了问题。

以前有人遇到过这个问题吗?您如何建议获得对该过程的引用?我想过使用GetProcessesByName并迭代它们的窗口标题,但不幸的是标题可能与第一个启动的进程相同。

注意: IE8是第一个使用进程分离的IE版本,因此只有IE8才有这种方式,我对IE7没有这个问题,不幸的是我也需要IE8支持。< / p>

1 个答案:

答案 0 :(得分:0)

我过去使用过运行对象表(ROT)来查找特定进程并对其进行控制。

http://www.codeproject.com/KB/COM/ROTStuff.aspx