我正在使用以下代码迭代浏览器可执行路径列表并启动它们中的每一个:
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
,但没有成功。
问题是,如何强制Google Chrome在启动过程中运行,那么可以等到窗口关闭?
的更新 的
只是为了澄清这个问题:
答案 0 :(得分:7)
由于默认设置,Chrome默认情况下会在后台持续运行。将此选项更改为未选中:
Settings > Show advanced > System > 'Continue running background apps when Google Chrome is closed'
因此,在您的代码再次运行Chrome之前,您必须确保Chrome已关闭。这对我有用。
Chrome有一个'母进程'和一些子进程。 问题是,如果你使用你的代码运行chrome,你试图创建“母进程”的新实例,但现有的实例不会让你这样做。她会立即杀死你的新进程并创建自己的孩子。这是它的工作原理......
所以,你所需要的只是找出如何运行另一个'chrome mother process'并阻止之前的拥抱杀死她; P
我找到了这个解决方案:
使用此参数--user-data-dir="%temp%/random_name"
运行新的Chrome流程。这意味着您将使用新的用户配置文件打开chrome。
优点:
缺点:
所以,也许你应该朝这个方向寻找......
答案 1 :(得分:0)
另一个(排序)工作的命令行参数是--chrome-frame
。在此模式下Chrome似乎使用WinInet API,因为IE历史记录可用。我更喜欢将@ {1}}与@DamianDrygiel提议的唯一临时文件夹一起使用。
答案 2 :(得分:0)
您可以找到您运行的Chrome进程的所有子进程,然后等待它们完成。
StackOverflow问题包含一些有用的代码:Find all child processes of my own .NET process / find out if a given process is a child of my own?。您也可能会发现这很有用:Monitor child processes of a process。