从命令行打开 Chrome,然后等待它关闭
本文关键字:等待 然后 命令行 Chrome | 更新日期: 2023-09-27 18:36:33
我使用以下代码遍历浏览器可执行路径列表并启动每个路径:
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命令行开关,包括--new-window
和--single-process
但没有成功。
问题是,我怎样才能强制谷歌浏览器在启动过程中运行,这样就可以等到窗口关闭?
更新
只是为了澄清这个问题:
- 我知道为什么它不起作用 - 这是因为 Chrome 对不同的事情使用多个进程,例如不同的标签、插件等。
- 我试图在进程树上查找正确的进程,但一无所获。
- 我不能只采用chrome创建的最新进程,因为它可能是为页面所需的插入而创建的进程,而不是页面本身。
如果您想打开/关闭整个 Chrome 窗口:
默认情况下,Chrome 由于其默认设置而不断在后台运行。将此选项更改为未选中:
Settings > Show advanced > System > 'Continue running background apps when Google Chrome is closed'
因此,您必须确保Chrome已关闭,然后再通过代码再次运行它。这对我有用。
<小时 />如果只想打开/关闭相关选项卡:
Chrome 有一个"母进程"和一些子进程。问题是,如果您使用代码运行 chrome,您将尝试创建"母进程"的新实例,但现有的实例不会让您这样做。她会立即杀死你的新过程,并创造自己的孩子。这就是它的工作原理...
因此,您所需要的只是弄清楚如何运行另一个"铬母亲进程"并防止之前的拥抱杀死她;P
我想出了这个解决方案:
使用此参数运行新的 chrome 进程 --user-data-dir="%temp%/random_name"
。这意味着您正在使用新的用户配置文件打开 chrome。
优势:
- 它有效
- Chrome 正在新窗口中打开
- 当所有相关标签页都关闭时,Chrome 将关闭
弊:
- 默认设置(无书签等),但您可以从默认用户配置文件目录中复制它们
所以,也许你应该在这个方向上寻找sth......
另一个(有点)工作的命令行参数是 --chrome-frame
。在此模式下,Chrome似乎使用WinInet API,因为IE历史记录可用。我更喜欢@DamianDrygiel提出的将--user-data-dir
与独特的临时文件夹一起使用的想法。
您可以找到您运行的 Chrome 进程的所有子进程,然后等待它们完成。
有一个 StackOverflow 问题,其中包含一些有用的代码:查找我自己的 .NET 进程的所有子进程/找出给定进程是否是我自己的子进程?此外,您可能会发现这很有用:监视进程的子进程。