lessmsi 快速实战:不安装软件也能完整提取 MSI 安装包内容
【免费下载链接】lessmsiA tool to view and extract the contents of an Windows Installer (.msi) file.项目地址: https://gitcode.com/gh_mirrors/le/lessmsi
一个真实的下午:文件明明在安装包里,却拿不出来
周四下班前,运维阿凯收到一个棘手请求:客户机器上的软件升级后配置文件被覆盖,业务中断,但客户现场不允许重装整个软件。他手头只剩原始安装包——一个 .msi 文件。MSI 是 Windows 安装程序的标准格式,平时双击它只会进入安装流程,根本没法"打开看看"。阿凯想起同事提过一个叫 lessmsi 的工具,下载解压后敲了两条命令,十分钟内把配置文件从安装包里"抠"了出来,业务当场恢复。
这件事的核心,就是今天要聊的主角:lessmsi,一个不安装任何组件、专门查看和提取 Windows Installer(.msi)文件内容的开源小工具。
lessmsi 是什么?一句话说清楚
lessmsi 是一个同时提供图形界面和命令行两种操作方式的 MSI 文件查看与提取工具。简单说,MSI 安装包本质上是一个"数据库 + 文件仓库"的复合体,lessmsi 的作用就是把这个仓库的门打开:你能看到里面的全部文件、各组件的依赖关系,还能按需把它们取出来,全程不需要执行安装。
它和"把 MSI 当压缩包强行解压"的通用工具最根本的区别,在于它读的是 MSI 的原始结构——基于 Windows Installer 数据库的语义。文件、目录、组件、表、摘要信息,每一层都能看;而普通解压工具拆出来的往往是一堆命名混乱的文件,无法还原安装逻辑。核心逻辑集中在核心引擎,命令行入口在命令行接口,界面部分在图形界面,想深入源码的话顺着这些模块看下去即可。
先看它最值得关注的几个能力
- 🖥️双接口操作:图形界面适合慢慢浏览,命令行适合脚本化批量处理。它实际解决的是"不同操作习惯的人都能用"的问题。
- 📂按需提取:不必把整个安装包解出来,可以只挑一个或几个文件。它实际解决的是"只为拿一个配置却要解压几百兆"的浪费。
- 🗄️内部数据库视图:能查看 Component、Property 等表,理清组件与文件的依赖。它实际解决的是"只知道装了什么,不知道它怎么组织"的盲区。
- 🧩资源管理器集成:在 MSI 文件上右键就能直接提取。它实际解决的是"偶尔用一次、不想记命令"的场景。
- 📦零安装运行:下载即用,不往系统里注册组件,用完删除不留痕。
一条主线:从拿到工具到第一次成功提取
获取方式按省事程度排序:直接下载发布页的 zip 包,解压即用;或者用 Chocolatey 一条命令choco install lessmsi安装;想折腾源码,就克隆仓库:
git clone https://gitcode.com/gh_mirrors/le/lessmsi克隆后按项目文档在 Windows 上用 Visual Studio 编译即可。不管哪种方式,拿到可执行文件后,先运行这一条验证环境:
lessmsi h # 显示帮助页面,确认程序能正常跑起来接着就是第一个正式提取。假设安装包叫setup.msi:
lessmsi x setup.msi out\ # 把 setup.msi 里所有文件提取到 out 目录这里每个部分都值得解释一下:x是"提取"(extract)命令;第二个参数是 MSI 文件路径;第三个参数是输出目录,注意它必须以反斜杠\结尾——这是 lessmsi 区分"输出目录"和"要提取的文件名"的依据。我第一次用就漏了反斜杠,结果它把目录当成文件名去匹配,报了个让人摸不着头脑的错误。提取过程中,控制台会逐行打印进度,格式是"已提取数/总数 + 当前文件名",长任务也能看到进展。
想改用图形界面,两个办法任选:
lessmsi o setup.msi # 用 GUI 打开指定 MSI lessmsi # 不带任何参数,直接启动 GUI上图是 lessmsi 的"提取文件"标签页:中间列出安装包内的全部文件(名称、所在目录、大小、版本),勾选后点右下角的 Extract 即可提取,对应命令行x命令的图形化版本。
到这里,你已经完成了"拿到工具 → 第一次成功提取"的完整闭环,剩下的就是按需深入。
三个真实高频场景,照着做就能复现
场景一:只想拿安装包里的某一个文件。遇到的状况是:只需要config.ini和logo.ico,不想把整个包解出来。采取的步骤是:
lessmsi x setup.msi out\ "config.ini" "logo.ico" # 输出目录之后逐个列出文件名最终效果:out 目录里只出现这两个文件(连同它们在包内的相对目录结构),几十兆的包不再需要全量解压。
场景二:分析一个 MSI 到底装了什么、组件怎么组织的。遇到的状况是:想搞清楚安装包内部结构,而不是只拿文件。采取的步骤是,命令行可以输出任意表的 CSV:
lessmsi l -t Component setup.msi # 列出 Component 表的全部内容l是"列出表"命令,-t指定表名。最终效果:拿到一份可直接导入表格软件的 CSV,组件与文件的关系一目了然;图形界面里对应的是 Table View 标签页,可以下拉切换所有表。
上图是"表格视图"标签页,当前选中 Component 表,每个组件对应一个唯一 ID。这个视角对排查安装冲突、理解依赖关系特别有用。
场景三:日常偶尔用,不想记任何命令。遇到的状况是:只是偶尔提一次文件,命令行参数老是忘。采取的步骤是:在 GUI 的 Edit → Preferences 里勾选资源管理器集成,之后在任何 MSI 文件上右键,选择 "Extract Files" 直接提取。最终效果:右键点两下、选个目录就完成提取,体验和"解压 zip"几乎一样。
上图是集成后的效果:MSI 文件的右键菜单里多出 "Extract Files" 一项,选个目标目录即完成提取,适合不熟悉命令行的使用者。
边界与避坑:什么时候别指望它
工具好用,但有几个边界必须心里有数:
- 它只认 MSI / MSP:扩展名是 .exe 的自解压包,以及 InnoSetup、NSIS 制作的安装程序,lessmsi 一概不认。拿到的安装包不是 MSI,就别在这上面耗时间。
- 依赖 .NET Framework 4.8:Windows 10 及更新的系统基本自带;老旧系统如果运行报错,先检查这个运行库是否齐全。
- 外部 CAB 文件要放在一起:少数 MSI 会把实体文件放在同目录的 .cab 里(项目测试样本里就有这种例子),提取时 .msi 和 .cab 必须同目录,否则会报"找不到外部 CAB"的错误。
- 目录结构默认保留:
x会按包内目录结构还原;如果想把所有文件摊平到同一个文件夹,用xfo(同名直接覆盖)或xfr(同名自动加序号改名),避免文件互相覆盖丢失。 - 提取不等于获得授权:从安装包里取出的文件版权仍归原软件所有,建议只用于备份恢复、故障排查这类正当用途。
收个尾,现在就能动手
lessmsi 解决的从来不是一个惊天动地的问题,而是"文件明明就在安装包里,你却拿不出来"这种每天都在发生的小麻烦。它把 MSI 从"只能安装"变成"可以阅读、可以按需提取",仅此而已,但足够实用。
现在就做一个动作:克隆仓库,或者直接下载一个发布包,然后对任意一个你手头的 MSI 文件执行lessmsi x 你的安装包.msi 测试输出\,亲眼看看提取出来的目录结构——这比任何介绍都直观。
【免费下载链接】lessmsiA tool to view and extract the contents of an Windows Installer (.msi) file.项目地址: https://gitcode.com/gh_mirrors/le/lessmsi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考