2009-08-04 102 views
1

使用Process.Start,我启动了各种IE8和Firefox(3.5)进程,我保留一个Process实例。如何恢复已重新启动的进程的引用?

稍后在应用程序中,我将使用Process实例的MainWindowHandle属性通过P/Invoke将某个平台API函数用于该窗口。

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

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

  • 的Process.Start被称为与“IEXPLORE.EXE”
  • 进程开始继续运行
  • 过程。开始再次调用“iexplore.exe”
  • 第一个进程继续运行,但第二个立即死亡
  • 另一个iexplore进程已启动(推测可能是第一个iexplore进程)。
  • 在此期间,用户只有在第二个进程被终止并重新启动后才会看到第二个IE窗口。

我明白为什么这些浏览器以这种方式行事,但如果我想要稍后控制创建的进程,它确实会对我造成问题。

有没有人遇到过这个问题?你会如何建议重新参照过程?我想过使用GetProcessesByName并遍历其窗口标题,但不幸的是,标题可能与第一个启动的过程相同。因为IE8是第一个使用进程分离的IE版本,所以只有IE8的行为如此,IE7没有这个问题,不幸的是我还需要IE8的支持。

回答

相关问题