【发布时间】:2013-10-23 21:39:43
【问题描述】:
我正在使用以下代码遍历浏览器可执行路径列表并启动它们中的每一个:
foreach (var browser in browsers)
{
var proc = new Process();
proc.StartInfo.FileName = browser.ExecutablePath;
proc.StartInfo.Arguments = "http://google.com";
proc.Start();
proc.WaitForExit();
Console.WriteLine(proc.ExitCode.ToString());
proc.Close();
}
应该做的是:它应该打开加载了 google.com 的浏览器窗口并停止应用程序,直到窗口关闭。它适用于 IE 和 Firefox,但适用于 Chrome。
对于 Chrome,proc 在启动浏览器后处于 Exit 状态,此时窗口仍处于活动状态且可见。
我尝试使用一些chromium command line switches,包括--new-window 和--single-process,但没有成功。
问题是,如何强制谷歌浏览器在它启动的过程中运行,这样才有可能等到窗口关闭?
更新
只是为了澄清问题:
- 我知道它为什么不起作用 - 这是因为 Chrome 使用多个进程来处理不同的事情,例如不同的选项卡、插件等。
- 我试图在进程树上查找正确的进程,但什么也没找到。
- 我不能只采用chrome创建的最新进程,因为它可能是为插入页面所需而创建的进程,而不是页面本身。
【问题讨论】:
-
请注意,Chrome 会为每个标签页创建一个单独的进程,IE 和 Firefox 不太可能在单独的线程中运行标签页。
-
Chrome 使用多个进程来运行所有内容。超级用户对此进行了讨论:superuser.com/questions/461552/…
-
假设打开的tab的进程是你启动的进程的子进程,我试着用这里的代码找到proc的子进程[stackoverflow.com/questions/7189117/…但是没用,对不起...
-
@Mecek 我尝试了同样的方法,但一无所获。看起来 chrome 总是有一个 master 进程来处理所有其他进程,无论您如何打开新窗口/标签。请在问题末尾查看我的更新。
-
您不能使用 Process 类来完成这项工作。您必须编写一个 Chrome 扩展程序。
标签: c# google-chrome process