分享

修改msi文件

 昵称43998645 2022-10-24 发布于上海

前言

msi文件是一个安装包文件,可以看做一个数据库,其中包含很多资源,例如图片,配置文件,可执行文件exe等等。

我想要把修改过 exe可执行文件提交到msi文件中,那么就需要知道msi文件的构成,首先 msi文件 中最重要的内容就是cab文件,cab文件可能是在 msi文件 的内部,也可能是独立于 msi文件 之外的。如果cab文件是在msi文件内部的话, 那么提取和提交 cab文件 就需要用到msidb这个软件了。

环境配置

我们修改 msi文件 只需要用到俩个软件: iexpress(用于将目录打包成cab文件) , msidb(用于获取 msi文件 中的信息,提取或提交cab文件到msi)。
iexpress 一般在系统中内置,并且已经包含在path环境变量中,可以在cmd任意目录测试,输入iexpress看看是不是弹出这个软件了。
msidb需要直接设置一下系统的path环境变量的,因为我要在cmd一些目录中执行这条命令。
msidb下载地址

修改msi步骤

  1. 提取cab文件
  2. 解压cab文件
  3. 将修改的资源放回解压cab解压后目录
  4. 将目录重新打包成cab文件
  5. 将新的cab文件提交进msi文件

如果cab文件是独立在msi文件之外的,那么就可以省略 1,5步骤。

1.提取cab文件

首先要知道msi包含cab文件的名字,才可以提取出来。可以使用msidb命令提取俩个文件。

1.1 提取Media.idt和File.idt文件

msidb -e -d msi文件名字

在这里插入图片描述

在这里插入图片描述
选中 FileMedia 这俩个文件,然后选中导出,点击确定,此时在目录中会出现这俩个文件(后缀名为.idt)。

这俩个文件都可以用记事本打开:
在这里插入图片描述
cpx-fmt.cab 就是cab的文件名,前面的#是无用的。

1.2 提取cab文件

msidb -x cab文件名 -d msi文件名

2. 解压cab文件

一般的解压软件都可以直接解压cab文件。将其解压到一个目录里面就可以了。

3. 将修改的资源放回解压cab解压后目录

我要替换的是我修改的一个exe, 图中的 cpxfmtEXE 就是可执行文件exe,只不过这里没有后缀名。
在这里插入图片描述
将修改好的文件命名同样的名字并替换到该目录里面。

4. 将目录重新打包成cab文件

这一步是最为复杂的。主要在于压缩的顺序问题。文件的顺序在我们之前的File.idt文件中,可以用excel文件打开查看:
在这里插入图片描述

squence 这一列就是顺序编号。
而我们目标是生成一个和File.idt文件中的顺序一致的SED文件, 然后使用iexpress软件使用SED文件进行打包。 由于这一步用excel操作较为复杂,所有我写了一个 软件 脚本可以打包 cab。
软件下载地址
将这个软件放入到,File.idt 的同一目录,这时解压cab的目录和File.idt 文件和这个软件都应该处于同一目录。然后启动这个软件:
在这里插入图片描述
这里我的cab解压的目录是cpx-fmt, 然后回车,等待打包结束:
在这里插入图片描述
这时会在目录中生成一个new.cab的文件,这个就是打包好的文件。由于我写的这个软件中已经调用iexpress,所有你无需运行iexpress 命令了。

5. 将新的cab文件提交进msi文件

new.cab 重新命名为原始的文件名,我这里是 cpx-fmt.cab。然后运行命令:
清除msi文件中的原始cab包数据:

msidb -k cab文件名 -d msi文件名

添加新打包的cab文件:

msidb -a cab文件名 -d msi文件名

这里 cab文件名,必须是前面获取到的文件名,所以需要将前面生成的 new.cab 修改为原始名
到此所有步骤结束。

参考文章

https://blog.csdn.net/davidhsing/article/details/9962377
这里可以查看更加详细的4. 将目录重新打包成cab文件这一步的逻辑,作者用excel处理的,很感谢作者提供的方法。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多