代码之家  ›  专栏  ›  技术社区  ›  Matt Brindley

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

  •  1
  • Matt Brindley  · 技术社区  · 15 年前

    使用process.start,我正在启动各种ie8和firefox(3.5)进程,我为它们保留了一个进程实例。

    稍后在应用程序中,我将使用流程实例的mainwindowhandle属性将窗口作为目标,以便通过p/invoke与某些平台a p i函数一起使用。

    然而,ie8和firefox都会杀死 第二 进程i启动,然后使用第一个重新启动它。这意味着我的流程实例现在引用一个关闭的流程,因此hasexited为true,mainwindowhandle等于intptr.zero。

    下面是一个发生了什么的示例(我在这个示例中使用ie8):

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

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

    以前有人遇到过这个问题吗?您建议如何获取对流程的引用?我考虑过使用getprocessesbyname并遍历它们的窗口标题,但不幸的是,标题可能与启动的第一个进程相同。

    注: ie8是ie使用进程分离的第一个版本,所以只有ie8这样做,ie7没有这个问题,不幸的是我也需要ie8支持。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Eric J.    15 年前

    在过去,我使用running object table(rot)查找特定进程并对其进行控制。

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