01 setup和mini_installer
src\chrome\installer\mini_installer
src\chrome\installer\setup
mini_installer以需要安装的文件为资源,打了一个包。
具体要打包的资源在 src\chrome\installer\mini_installer\chrome.release
里描述。
setup实现了具体的安装逻辑。
可以参考gclxry
的一篇博客:Chromium installer介绍
这两个工程是需要单独生成的:
ninja -C out\DebugX64 setup mini_installer
02 关于生成mini_installer/setup的vs工程文件
在gn gen生成项目工程文件时,如果加了过滤项,可能无法生成mini_installer/setup的vs工程文件。比如:
gn gen out/DebugX64 --ide=vs2017 --winsdk=10.0.17134.12 --filters=//chrome
这样生成的工程中,没有生成mini_installer/setup的vs工程文件。
取消掉过滤项--filters=//chrome
即可生成。
03 关于调试mini_installer/setup
1 把mini_installer工程设为启动项目
2 mini_installer.cc的ProcessExitResult RunProcessAndWait中会在新进程中调用setup.exe
::CreateProcess(exe_path, cmdline, NULL, NULL, FALSE, CREATE_NO_WINDOW,
NULL, NULL, &si, &pi)
A:跨进程调试的断点设置:
在setup_main.cc
的wWinMain
函数处加入一个::MessageBoxA(NULL, “wait setup”, “test1”, MB_OK);
或者 Sleep(5000);这类的,来附加进程。
B:setup.exe的符号文件:
这里的新进程的setup.exe的路径已经被拷贝到临时目录 %temp%\CR_*.tmp\setup.exe
。
这时setup.exe
的默认符号文件src\out\DebugX64\setup.exe.pdb
是找不到的;需要设置mini_installer项目的符号文件路径,或者把src\out\DebugX64\setup.exe.pdb
拷贝到上面的临时目录中。
04 需要修改的自定义内容
src\chrome\installer\util\util_constants.cc
文件中 kChromeExe、kChromeNewExe、kChromeOldExe,一般需要根据自己的需要修改下名称。安装时候如果找不到kChromeExe文件,会失败。