安装程序 Repack 攻略 之 MSI 篇
安装程序 Repack 攻略 之 MSI 篇
下面是我对 MSI 的基本情况的认识,如果只想了解怎么进行 Repack,也可以跳过这一部分。
MSI 概述
MSI 最基本的部分是对安装程序的一个描述,包含了一个所谓安装信息数据库,涉及到安装界面、所使用的文件、快捷方式、INI文件、注册表、以及版本控制和反安装信息等。
对于安装时所使用到的文件,MSI 可以有 3 种方式来处理:
文件随同安装程序以原生态发布
文件压缩成 Data.cab 的形式随安装程序发布
文件压缩成 .cab 文件后注入到 .msi 文件中
显而易见,一般安装程序很少以第一种方式发布,而第二种和第三种比较常见。
对于注入到 .msi 文件中的情况,需要首先用 orca 找出 Media 的描述值,然后用 msidb 将 .cab 从 .msi 中抽取出来,如果直接以 Data.cab 形式发布就可以省去这一步操作。
如果要添加移除或是替换 .cab 中的文件,需要先用 orca 找出文件对应的描述值(可能就是文件名本身或是一串HEX编码抑或两者的结合),然后将 .cab 文件解包,按照描述值的文件名来操作文件后再用 cabarc 重新打包回去。
如果 .cab 是从 .msi 抽取的,再用 msidb 重新编入。
显而易见,一般安装程序很少以第一种方式发布,而第二种和第三种比较常见。
对于注入到 .msi 文件中的情况,需要首先用 orca 找出 Media 的描述值,然后用 msidb 将 .cab 从 .msi 中抽取出来,如果直接以 Data.cab 形式发布就可以省去这一步操作。
如果要添加移除或是替换 .cab 中的文件,需要先用 orca 找出文件对应的描述值(可能就是文件名本身或是一串HEX编码抑或两者的结合),然后将 .cab 文件解包,按照描述值的文件名来操作文件后再用 cabarc 重新打包回去。
如果 .cab 是从 .msi 抽取的,再用 msidb 重新编入。
本文以修改 RemotelyAnywhere.msi 为例进行操作说明,目标是用 RemotelyAnywhere 补丁替换安装包中的原文件,同时将购买的许可协议集成在安装包内,达到安装完毕后直接可以使用的效果:
1. 使用 orca 打开 RemotelyAnywhere.msi ,选择 TOOLS 菜单的 OPTIONS 命令,切换到 DATABASE 面板,勾
选“Generate a unique Package Code each time a database is saved”,然后执行 File 菜单的 Save as 命令,把 RemotelyAnywhere.msi 文件另存为 ra.msi 文件。
2. 使用 orca 打开 ra.msi ,在左侧 Tables 中选择 Media ,在右侧 Cabinet 列可以看到压缩包名称为 #data.cab ,记下,关闭 orca。
3. 使用 msidb 从 ra.msi 中提取 data.cab:
CODE:
msidb.exe -x data.cab -d ra.msi
4. 将 data.cab 中的文件展开:
CODE:
·建立 files 目录
md files
·展开文件到 files
expand data.cab -F:* files
·删除 data.cab
5. 将补丁文件 RemotelyAnywhere.exe 复制到 files 目录中覆盖原文件。
6. 将文件重新打包成 data.cab :
CODE:
cabarc.exe -m LZX:21 -r N data.cab "files/*"
7. 将 data.cab 编入 ra.msi 中:
CODE:
msidb.exe -a data.cab -d ra.msi
8. 使用 orca 打开 ra.msi ,在左侧 Tables 中选择 Registry ,在右侧工作区点右键,选择 Add Row,按以下内容输入各列:
CODE:
[Registry] REGISTRY_LICENSE
[Root] 2
[Key] Software/RemotelyAnywhere/V5
[Name] License
[Value] -----BEGIN LICENSE-----
PRODUCT RemotelyAnywhere...
[Component] Service_Files
这里是自己的编撰了一个注册表项用于安装时自动输入许可文件,Value 栏的内容就按你购买的 License 的内容输入即可。
9. 使用 orca 保存完成后的 MSI,收工。
PS: 本文中因为只涉及替换文件,所以没提及增减文件的操作,如果有需要这方面的操作,首先应在操作 cab 包时增减文件,并用 orca 打开 msi 文件对以下数据表项进行调整:FeatureComponents、File,具体操作在此不赘述,遇到具体案例时可以联系我,到时根据实战再修改此贴。
TIPS: 如果安装程序是由 Setup.exe Data1.cab 等一系列文件组成的,你还可以使用 InstallShield 的 Pakage For The Web 来将其打包成单个文件,同样,如果原始安装程序是 InstallShield 制作的单个文件,不妨试一试用右键打开,WinRAR 可以将其解压还原出多个文件。
文中提及的工具: CabArc
msidb
orca
安装程序 Repack 攻略 之 MSI 篇相关推荐
- 安装程序 Repack 攻略 之 MSI 篇(IS版)
本文主要讨论使用 InstallShield 进行 MSI 安装包的修改封装,要查看如何使用微软提供的开发工具进行此操作,请查看此贴: [原创]安装程序 Repack 攻略 之 MSI 篇(MS版) ...
- 安装程序 Repack 攻略 之 CAB 篇
某些情况下我们需要对软件的安装程序包进行修改,替换其中的部分文件,也就是所谓 Repack. 本文讨论采用.CAB压缩包的安装程序的拆解打包,主要是搜集工具,使用方法除了Install Shield的 ...
- 基于DCMTK的DICOM相关程序编写攻略
2008年09月10日 星期三 15:35 基于DCMTK的DICOM相关程序编写攻略 前言: 由于现在的医学影像设备的图像存储和传输正在逐渐向DICOM标准靠拢,在我们进行医学图像处理的过程中,经常 ...
- VS2015编译TensorFlow C++程序完全攻略
VS2015编译TensorFlow C++程序完全攻略 本文参考和综合了多篇网络博客文章,加以自己的实践,最终终于在windows环境下,编译出可以用于C++程序调用tensorflow API的程 ...
- Py之curses:curses库的简介、使用、安装方法详细攻略
Py之curses:curses库的简介.使用.安装方法详细攻略 目录 curses库简介 curses库安装 T1.直接命令法 T2.下载whl法 curses库的使用方法 curses库简介 cu ...
- Longhorn安装使用全攻略(下)(转)
Longhorn安装使用全攻略(下)(转)[@more@] 微软Windows图形和游戏负责人Lester,在接受Gamespot访问的时候表示,微软下一代操作系统Longhorn将原生支持XNA开发 ...
- Lattice ddr3教程全攻略之仿真篇
Lattice ddr3教程全攻略之仿真篇 对于这部分,首先建议安装好diamond3.1,modelsim se 10.1a这两个软件,如果想仔细分析DDR3的IP部分,可仔细阅读DDR3 SDRA ...
- python curses_Py之curses:curses库的简介、使用、安装方法详细攻略
Py之curses:curses库的简介.使用.安装方法详细攻略 目录 curses库简介 curses 库 ( ncurses ) 提供了控制字符屏幕的独立于终端的方法.curses 是大多数类似于 ...
- 计算机配置方案2018,写给设计师的电脑配置攻略之PS篇 2018-08-15
写给设计师的电脑配置攻略之PS篇 对于设计师而言,电脑是吃饭的工具,如果工具不趁手,势必事倍功半.我相信大多数准备入行或已经工作多年的设计师,都明白这个道理.但是,大多数人对于怎么选配适合设计.适合自 ...
最新文章
- MySql批量插入时,如何不插入重复的数据
- vue组件库(二):基于verdaccio工具npm私服搭建
- C语言基础_函数指针
- 【实操】路由选择工具ACL
- lucene索引_在崩溃或断电后测试Lucene的索引耐久性
- 你们觉得很可笑,但是很多人信的,真的很多很多。。
- Python实现完全二叉树
- nikon n150在电脑中不显示里面的图片的解决方法
- oracle 修改字段长度_Oracle字段长度引起的思考length()和lengthb()
- MySQL主从同步相关-主从多久的延迟?
- mysql的知识_mysql基础知识
- 请问 土壤粒径的多重分形维数怎么计算?有matlab计算代码吗?
- 还在用git commit -m 吗?Git 提交规范和自动产生changelog手摸手教程。
- 【Rust日报】2022-07-06 Android 平台中的 Rust
- oneos组件系列02:ws2812全彩LED
- 零基础学爬虫大概多久?
- 什么是auto?auto的作用?
- 支持1588的交换和不支持1588的交换有什么区别?
- JAVA高级工程师-面试经历(含面试问题及解答)
- 桥梁在线计算机监测系统,桥梁安全在线监测系统
热门文章
- 95后程序员连续15天加班到凌晨2点在餐厅泪崩!看到955不加班的公司名单,酸哭了......
- 台式计算机标题出现乱码,电脑系统显示乱码的两种解决办法
- Android登录注册功能加密处理
- 社群运营必备 | 如何一站式解决存活、留存、转化三大难题
- Python版本VTK官方文档教程学习(五)
- 电脑提示d3dcompiler_47.dll丢失怎么解决?d3dcompiler_47.dll缺失修复方法
- ci global.php,易简全球风尚大典首秀,2014/2015三大宝宝潮流发型亮相
- 派森诺基因云:从柱形图到圆柱图
- java 图片层级_UGUI图片层级和渲染顺序的奇怪关系
- 【八股文】11 Redis