我们知道一般的Windows程序都会有一个WinMain函数,Chrome的这个函数在chromeappchrome_exe_main_win.cc这个文件中:
首先,这个函数初始化了CommandLine,它是一个singleton,用来保存和管理当前进程中的所有参数。然后又创建了一个AtExitManager,它是用来负责所有singleton的销毁工作的。若是在Win8下并满足MetroDriver的检测的话,就可能通过MetroDriver::RunInMetro来启动Chrome。下面将详细看一下用的比较多的RunChrome函数。
RunChrome中的第一个先调用ShowRestartDialogIfCrashed,Chrome若是之前崩溃了,这个函数就互弹出一个MessageBox,告诉你崩溃的情况,是否需要再开启Chrome,若要开启,下面的代码再跑一遍,重新打开Chrome。
接下来初始化sandbox,sandbox对象创建完后,必须要用content::InitializeSandboxInfo初始化。
由于,Chrome的实际内容并不在Chrome.exe中,而在Chrome.dll中,所以下面有个创建MainDllLoader对象的过程 —— MakeMainDllLoader()。然后通过这个对象的Launch方法将整个Chrome加载起来,这个方法有两个参数:一个是WinMain中的HINSTANCE,另一个是之前创建的那个sandbox。