chromium的安装程序
转自:http://www.xue163.com/182/6/1822338.html#pinglun
这篇文章主要简单讲解chromium的安装程序mini_installer
在编译mini_installer时,要更改编译的参数把component设置为static_library,不然编译出来的mini_staller会报“mini_installer.exe is incompatible with the component build”的错误
python build\gyp_chromium -D"component=static_library"
可能重新编译之前需要清空之前编译的结果,清空完成后运行编译程序。
ninja -C out\Release -t clean
ninja -C out\Release mini_installer
这个步骤会把之前的chromium重新编译了,所以在清空之前需要考虑之前使用shared_library编译的chromium是否需要保存。
关于static_library和shared_library的区别,我个人的理解是:
static library:程序运行时依赖的库函数在编译时被包含到编译的目标代码中,所以程序可以在没有这些库的机器上运行。
shared library:程序运行时依赖的库函数在编译时没有被包含到编译的目标代码中,而是把这些函数属于哪个库和它们在库中的地址等信息记录下来。
当使用到这些函数时,会根据已记录下的信息把函数所属的库加载进来。
mini_installer的工程在src\chrome\installer下,入口就是mini_installer.cc
mini_installer.exe的工作比较简单,主要是进行了以下几个工作。
- 确定工作目录,这个工作目录也就是解压包的目录,这个目录通过GetTempPath函数确定,在win7下为C:\Users\%USERNAME%\AppData\Local\Temp,%USERNAME%就是当前用户的名称。在Temp目录下会创建一个格式类似CR_B4D84.tmp的文件夹,这个包用来解压安装文件。
- 解压安装文件,在CR_B4D84.tmp文件夹中会得到两个文件setup.exe和CHROME.PACKED.7Z
- 创建进程运行setup.exe,并等待安装程序完成程序的安装。
- 删除CR_B4D84.tmp临时文件夹。是否删除CR_B4D84.tmp临时文件夹,由函数ShouldDeleteExtractedFiles决定。为了能够让程序不删除CR_B4D84.tmp临时文件夹,需要在注册表\HKEY_CURRENT_USER\Software\Chromium下加入一项。该项的名称为ChromeInstallerCleanup,类型为字符串值,值为"0"。
以上就是mini_installer.exe的工作,在这个过程中,会创建进程运行setup.exe。
setup.exe的代码看起来比较复杂,它的实现在代码,setup_main.cc中,主要工作包括:
确定安装目录,chromium的安装分为两种,一种是system install,另一种是user install,都是通过PathProviderWin函数获取安装路径,具体代码在base_paths_win.cc。
如果是system install,安装目录CSIDL_PROGRAM_FILES,对应C:\Program Files
如果是user install,安装目录CSIDL_LOCAL_APPDATA,我win7系统下对应C:\Users\%USERNAME%\AppData\Local\
上述的基础路径下,会加上Chromium\Application\得到目标路径,这个路径在InstallerState::Initialize函数中生成,并保存在target_path_中。
调用安装函数InstallProducts,该函数的主要工作在InstallProductsHelper完成。
1、CreateTemporaryAndUnpackDirectories函数
生成temp_path:C:\Users\%USERNAME%\AppData\Local\Chromium\Application\Temp
生成解压路径unpack_path:C:\Users\%USERNAME%\AppData\Local\Chromium\Application\Temp\source
2、初始化rchivePatchHelper实例archive_helper
UncompressAndPatchChromeArchive函数
进行第一次解压,在unpack_path目录下解压CHROME.PACKED.7Z,得到chrome.7Z
UnPackArchive函数
进行第二次解压,解压chrome.7Z得到Chrome-bin目录
从Chrome-bin目录下得到当前安装的版本号installer_version
3、调用InstallOrUpdateProduct函数安装程序
该函数中调用InstallNewVersion函数,其中install_list包含了安装程序进行的一系列操作,包括创建目录、拷贝文件和修改注册表等。
在AddInstallWorkItems函数中为install_list添加安装的操作,然后调用install_list->Do()执行操作。
如果安装过程中出现错误,则调用install_list->Rollback()进行回滚。
chromium的安装程序的更多相关文章
- [Tool]Inno Setup创建软件安装程序。
这篇博客将介绍如何使用Inno Setup创建一个软件安装程序. Inno Setup官网:http://www.jrsoftware.org/isinfo.php. 可以下载到最新的Inno Set ...
- [转]MSI安装程序中的文件替换
原文链接:http://teach.hanzify.org/article/652-1233562028.html 前言 最近有汉化朋友问起如何不重新制作MSI文件,而直接用汉化好的文件替换MSI安装 ...
- Windows安装程序 报错 “已安装了较新版本” 导致无法安装程序的解决方法
打开注册表 HKEY_CURRENT_USER\Software\Microsoft\Installer\Products ,“查找”程序名称 如果有程序名和安装程序相同的 ,删除整个 项 ! 然后就 ...
- php安装程序
php安装程序 制作原理和步骤 检查目录或文件权限 修改或者添加配置文件 检查配置文件的正确性 导入数据库 锁定或删除安装文件 用到函数 iswritable("data/config.ph ...
- 关于SQL Server 安装程序在运行 Windows Installer 文件时遇到错误
前几日安装sql server2008r2 的时候碰到这个问题: 出现以下错误: SQL Server 安装程序在运行 Windows Installer 文件时遇到错误. Windows Insta ...
- 使用好压(HaoZip)软件打包EverEdit制作安装程序
最近使用EverEdit,使用原始的安装程序安装后,需要重新安装插件,对配置文件进行了修改,定制了工具栏.将安装后的程序目录进行打包,制作新的安装包,便于携带. 以下为打包制作过程: 打包原料:Eve ...
- Win10安装程序出现error code 2502 2503
在Win10中,在安装msi安装包的时候常常会出现代码为2502.2503的错误.其实这种错误是由于安装权限不足造成的,可以这种msi的安装包不像其他exe的安装程序,在安装包上点击"右键& ...
- <转>[WinForm] VS2010发布、打包安装程序(超全超详细)
1. 在vs2010 选择“新建项目”→“ 其他项目类型”→“ Visual Studio Installer→“安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, 1.“应 ...
- [WinForm] VS2010发布、打包安装程序
最近用到了VS2010WinForm的程序打包功能,网上发现一篇好帖,在此记录以供日后他人之需. 原文链接地址:http://www.mamicode.com/info-detail-2453.htm ...
随机推荐
- HDU 5348 MZL's endless loop(DFS去奇数度点+欧拉回路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5348 题目大意:给你一张图,有n个点,和m条无向边,让你把m条无向边变成有向边,使得每个节点的|出度- ...
- php强制输出到浏览器下载
$file_name="test.mp3"; $mp3_url = "";header( "Pragma: public" );header ...
- currentTime安卓
设定一个时间编写CurrentTime类设置属性为该时间用toString显示该时间我使用的currentTime ,苹果用起来是好使得为什么.安卓走到下面这一步却不接着走呢!!! e.current ...
- 翻译:MLAPP(2.1节 概率概述)
笔者:尝试翻译MLAPP(Machine Learning: a Probabilistic Perspective)一书,供机器学习的学者参考,如有错误理解之处请指出,不胜感激!(如需转载,请联系本 ...
- linux tar gzip 命令用法
语法:tar [主选项+辅选项] 文件或者目录 使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用. 主选项: -c: 建立压缩档案-x:解压-t:查看内容-r: ...
- vuejs学习——vue+vuex+vue-router项目搭建(一)
前言 快年底了却有新公司邀请了我,所以打算把上家公司的学到一下技术做一些总结和分享. 现在vuejs都2.0了,我相信也有很多朋友和我一样实际项目还是选择vue1.0的或者给新手一些参考,不管在选择哪 ...
- HadoopMR-Spark-HBase-Hive
 YARN资源调度: 三种 FIFO 大任务独占 一堆小任务独占 capacity 弹性分配 :计算任务较少时候可以利用全部的计算资源,当队列的任务多的时候会按照比例进行资源平衡. 容量保证:保证队 ...
- HTML5实战与剖析之原生拖拽(一拖拽历史概述)
提起拖拽,我就想起了在JavaScript培训的时候一个非常好玩的效果,那就是拖拽了.可以用鼠标任意拖拽着一个物体到任何你想去的地方. 最早拥有JavaScript拖拽功能的是IE4浏览器.当时,网页 ...
- 【C#】数据类型(sbyte,byte,short,ushort,int,uint,long,ulong和char。、、、)
C#的数据类型可以分为3类:数值类型,引用类型,指针类型.指针类型仅在不安全代码中使用. 值类型包括简单类型(如字符型,浮点型和整数型等),集合类型和结构型.引用类型包括类类型,接口类型,代表类型和数 ...
- Mock(模拟后端接口数据)配合Vuex的使用
1.下载Mock cnpm install Mockjs -S 2.新建一个data.js存放新生成的mock文件 编辑mock 并导出 const Mock = require('mockjs' ...