`
hecal
  • 浏览: 79631 次
社区版块
存档分类
最新评论

安装程序 Repack 攻略 之 MSI 篇(MS版)

 
阅读更多
本文主要讨论使用微软的开发工具 orca 和 msidb 进行 MSI 安装包的修改封装,要查看如何使用 InstallShield 进行此操作,请查看此贴:

【原创】安装程序 Repack 攻略 之 MSI 篇(IS版)

下面是我对 MSI 的基本情况的认识,如果只想了解怎么进行 Repack,也可以跳过这一部分。

MSI 概述
MSI 最基本的部分是对安装程序的一个描述,包含了一个所谓安装信息数据库,涉及到安装界面、所使用的文件、快捷方式、INI文件、注册表、以及版本控制和反安装信息等。

对于安装时所使用到的文件,MSI 可以有 3 种方式来处理:
  1. 文件随同安装程序以原生态发布
  2. 文件压缩成 Data.cab 的形式随安装程序发布
  3. 文件压缩成 .cab 文件后注入到 .msi 文件中

显而易见,一般安装程序很少以第一种方式发布,而第二种和第三种比较常见。

对于注入到 .msi 文件中的情况,需要首先用 orca 找出 Media 的描述值,然后用 msidb 将 .cab 从 .msi 中抽取出来,如果直接以 Data.cab 形式发布就可以省去这一步操作。

如果要添加移除或是替换 .cab 中的文件,需要先用 orca 找出文件对应的描述值(可能就是文件名本身或是一串HEX编码抑或两者的结合),然后将 .cab 文件解包,按照描述值的文件名来操作文件后再用 cabarc 重新打包回去。

如果 .cab 是从 .msi 抽取的,再用 msidb 重新编入。



本文以修改 RemotelyAnywhere.msi 为例进行操作说明,目标是用 RemotelyAnywhere 补丁替换安装包中的原文件,同时将购买的许可协议集成在安装包内,达到安装完毕后直接可以使用的效果:

文中提及的工具
CabArc
Orca
Msidb


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:
代码 (双击代码复制到粘贴板)
msidb.exe -x data.cab -d ra.msi

4. 将 data.cab 中的文件展开:
代码 (双击代码复制到粘贴板)
·建立 files 目录
md files

·展开文件到 files
expand data.cab -F:* files

·删除 data.cab

5. 将补丁文件 RemotelyAnywhere.exe 复制到 files 目录中覆盖原文件。

6. 将文件重新打包成 data.cab :
代码 (双击代码复制到粘贴板)
cabarc.exe -m LZX:21 -r N data.cab "files/*"

7. 将 data.cab 编入 ra.msi 中:
代码 (双击代码复制到粘贴板)
msidb.exe -a data.cab -d ra.msi

8. 使用 orca 打开 ra.msi ,在左侧 Tables 中选择 Registry ,在右侧工作区点右键,选择 Add Row,按以下内容输入各列:
代码 (双击代码复制到粘贴板)
[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 可以将其解压还原出多个文件。
分享到:
评论

相关推荐

    微软MSI清理工具-Repack

    微软MSI清理工具-Repack,

    spring-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.1.jar

    在Java开发中,Spring框架是不可或缺的一部分,它提供了一种模块化、可扩展的方式来构建应用程序。在使用Spring框架时,有时会遇到导入源码或运行项目时出现类找不到的错误,这通常是因为缺少了必要的依赖库。在这个...

    OfficeTab 8 RePack_Setup 完美版本

    1. **OfficeTab.msi**:这是主安装程序,用于在用户的系统上安装OfficeTab 8组件。它会将必要的DLL文件和设置添加到Office应用程序中,使标签功能生效。 2. **OfficeTabCenter.exe**:可能是一个配置或更新中心,...

    spring-cglib-repack-3.2.5.jar和spring-objenesis-repack-2.6.jar

    标题中的"spring-cglib-repack-3.2.5.jar"和"spring-objenesis-repack-2.6.jar"是两个与Spring框架相关的库文件,它们主要用于Spring框架的内部实现,尤其是针对Java对象的创建和代理机制。下面将详细解释这两个库的...

    spring-cglib-repack-3.2.6.jar,spring-objenesis-repack-2.6.jarspring-cglib-repack

    在给定的标题和描述中,提到了两个关键的jar包:`spring-cglib-repack-3.2.6.jar` 和 `spring-objenesis-repack-2.6.jar`。这两个文件对于理解Spring框架的内部机制以及如何在IDEA中构建Spring源码至关重要。 首先...

    WinRAR.6.0.Repack_terert_

    总结,WinRAR 6.0 Repack terert版结合了WinRAR的强大功能和terert的精心优化,为用户提供了一个既高效又实用的文件压缩解决方案。掌握并充分利用这些特性与技巧,能够极大地提升我们的文件管理和工作效率。无论是...

    spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.5.1.jar

    在Java开发领域,Spring框架是应用最广泛的轻量级框架之一,它提供了全面的基础设施支持,使得开发者可以更轻松地创建企业级应用。在深入理解`spring-cglib-repack-3.2.4.jar`和`spring-objenesis-repack-2.5.1.jar`...

    spring-cglib-repack-3.2.6.jar,objenesis-repack-2.6.jar

    ·安装GitHub下载新版的spring源码到本地·下载Gradle之后通过“gradle cleanIdea eclipse”命令将spring源码转换成可导入eclipse的工程·导入足够的spring工程之后,会发现spring-core下缺少spring-cglib-repack-...

    spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.ja及ck-2.5.1.jar

    "spring-cglib-repack-3.2.5.jar"、"spring-objenesis-repack-2.6.jar"和"spring-objenesis-repack-2.5.1.jar"这三个文件是Spring源码阅读环境中常用的依赖包,它们各自承担着不同的功能。 首先,我们来看"CGLIB"...

    spring-cglib-repack-3.2.6.jar和spring-objenesis-repack-2.6.jar

    在Spring框架中,CGlib被用作动态代理的实现之一。当目标对象不支持接口时(即,它只是一个普通的Java类),Spring会利用CGlib创建目标对象的子类,并在子类中拦截方法调用,这样就能实现AOP(面向切面编程)的功能...

    spring-cglib-repack-3.2.5.jar spring-objenesis-repack-2.5.1.jar

    Spring框架是Java开发中不可或缺的一部分,它为应用程序提供了一种模块化、面向接口的编程模型。在本场景中,我们关注的是两个特定的jar包——"spring-cglib-repack-3.2.5.jar" 和 "spring-objenesis-repack-2.5.1....

    spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.jar

    标题中的"spring-cglib-repack-3.2.5.jar"和"spring-objenesis-repack-2.6.jar"是Spring框架在运行时依赖的两个关键库,它们主要涉及到动态代理和对象创建的优化。 1. **CGLIB(Code Generation Library)**: ...

    spring-cglib-repack-3.1.jar,spring-objenesis-repack-2.1.jar

    当我们在研究或编译Spring 4.0的源码时,可能会遇到一些依赖问题,其中"spring-cglib-repack-3.1.jar"和"spring-objenesis-repack-2.1.jar"是两个关键的jar包,它们在源码编译过程中起着至关重要的作用。本文将详细...

    spring导入eclipse时少的spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar

    然而,有时候在导入Spring项目时,可能会遇到一些问题,例如标题中提到的"spring-cglib-repack-3.2.4.jar"和"spring-objenesis-repack-2.4.jar"这两个jar包的缺失。这些jar包对于Spring框架的正常运行至关重要,因为...

    spring-cglib-repack-3.2.6 和 spring-objenesis-repack-2.6

    在深入探讨Spring框架及其相关组件之前,我们先来理解一下标题和描述中提到的两个关键组件:`spring-cglib-repack-3.2.6` 和 `spring-objenesis-repack-2.6`。这两个jar包是Spring框架在进行某些功能实现时所依赖的...

    微软清理工具包

    当一个MSI安装程序未能正确卸载时,MSICUU2可以找到并删除与之关联的注册表项和文件,从而允许用户重新安装或卸载而不会遇到冲突。 使用MSICUU2的步骤通常包括: 1. 下载并运行MSICUU2.exe文件。 2. 工具会列出...

    spring-cglib-repack 资源

    在Java开发领域,Spring框架是应用最广泛的轻量级框架之一,它提供了全面的基础设施支持,使得开发者可以更高效地构建企业级应用。在Spring框架的运作过程中,有时会遇到由于类加载器或依赖冲突导致的问题,特别是...

    repack-bootimg.pl

    repack-bootimg.pl 重新打包Andorid boot image.

    spring-cglib-repack-3.2.5.jar spring-objenesis-repack-2.6.jar spring依赖包

    而`spring-cglib-repack-3.2.5.jar`和`spring-objenesis-repack-2.6.jar`这两个文件是Spring框架中两个重要的依赖包,它们分别涉及到CGlib和Objenesis两个库,这两个库在Spring中的作用不可小觑。 **CGlib(Code ...

    使用gradle构建Spring源码工程需要的Spring-chlib-repack-3.2

    在IT行业中,构建Java应用程序时,我们经常使用构建工具来自动化构建过程,如Maven或Gradle。本主题聚焦于使用Gradle构建Spring源码工程,特别是与`Spring-chlib-repack-3.2`相关的知识。这个特殊版本的Spring库是...

Global site tag (gtag.js) - Google Analytics