Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Open Chrome from command line and wait till it's closed

I'm using following code to iterate over a list of browsers executable paths and start each of them:

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();
}

What is should do is: it should open browser window with google.com loaded and stop the application until the window is closed. And it works fine for both IE and Firefox, but fails with Chrome.

For Chrome proc is in Exit state just after launching the browser, when the window is still active and visible.

I tried using some of chromium command line switches, including --new-window and --single-process but with no success.

Question is, how can I force Google Chrome to run in the process it is started in, so it would be possible to wait until window is closed?

Update

Just to clarify the question:

  • I know why it does not work - it's because Chrome uses multiple processes for different things, like different tabs, plug-ins, etc.
  • I tried to find the correct process looking on process tree, but found nothing.
  • I can't just take the latest process created by chrome, because it may be the process created for a pluging the page requires, not the page itself.
like image 822
MarcinJuraszek Avatar asked Oct 23 '13 21:10

MarcinJuraszek


People also ask

How do I open Chrome with CMD?

Launch Command Prompt, then enter "start chrome" into the window to open Google Chrome.

How do I open Chrome from terminal?

Type "chrome" without quotation marks to run Chrome from the terminal. Chrome is installed in your binary path, so no special directory is required.

How do I start Chrome incognito from command line?

Here's how to do it. To run Google Chrome in Incognito mode, the browser supports a special command line switch, -incognito, which forces the browser to start with the Incognito window opened instead of the regular browsing session. Note the hyphen before 'incognito'.


1 Answers

If you want to open/close entire Chrome window:

Chrome by default is constantly running in background because of its default settings. Change this option to unchecked:
Settings > Show advanced > System > 'Continue running background apps when Google Chrome is closed'

So you have to make sure Chrome is closed before you run it again by your code. That works for me.


If you want to open/close related tabs only:

Chrome have one 'mother process' and some child processes. The problem is that if you run chrome using your code you are trying to create new instance of 'mother process' but the existing one won't let you do it. She'll instantly kill your new process and create her own child instead. That's how it works...

So, all you need is figure out how to run another 'chrome mother process' and prevent the previous hug from killing her ;P

I figure out this solution:
Run new chrome process with this parameter --user-data-dir="%temp%/random_name". This means that you are opening chrome with new user profile.

Advantages:

  • It works
  • Chrome is opening in new window
  • Chrome is closing when all related tabs are closed

Disadvantages:

  • Default settings (no bookmarks, etc) but you can copy them from default user profile directory

So, maybe you should look for sth in this direction...

like image 147
Damian Drygiel Avatar answered Sep 21 '22 00:09

Damian Drygiel