lessmsi 使用教程:不装软件也能提取 MSI 安装包文件的完整指南

📅 2026/8/17 23:08:20
lessmsi 使用教程:不装软件也能提取 MSI 安装包文件的完整指南
lessmsi 使用教程不装软件也能提取 MSI 安装包文件的完整指南【免费下载链接】lessmsiA tool to view and extract the contents of an Windows Installer (.msi) file.项目地址: https://gitcode.com/gh_mirrors/le/lessmsilessmsi 是一款专门用来查看和提取 Windows Installer.msi安装包内容的开源工具它同时提供命令行与图形界面两种操作方式目标用户是那些需要从安装包里拿文件但不想真正安装软件的运维工程师、开发者和普通电脑用户。本文会从 MSI 文件的内部结构讲起用一个真实的工作场景带你走完第一次提取 → 日常操作 → 深度分析 → 避坑的完整流程。一个运维老王的真实下午老王负责公司两百多台 Windows 终端的软件维护。这天下午一台办公电脑的某个系统 DLL 被误删了报错弹个不停。这个 DLL 来自半年前分发的一款软件安装包重装一次要等二十分钟还会牵连一堆配置。他的处理方式其实很简单打开当初分发的 .msi 安装包把里面那个 DLL 单独抠出来复制进系统目录重启验证收工。整个过程不到三分钟。这件事之所以能这么快靠的就是 lessmsi——一个不需要安装、不会修改系统注册表、用完即走的提取工具。它解决的痛点非常集中MSI 安装包不是普通压缩包Windows 自带的解压工具打不开它而很多场景下你只是想要里面的某个文件。第一件事MSI 文件其实是压缩包套数据库动手之前先花一分钟理解 MSI 是什么。这决定了你后面会不会用错工具。MSI 文件Windows Installer 包的内部由两部分构成一个嵌入式 CAB 压缩流所有实际安装的文件都以压缩形式存在这里这也是普通解压软件打不开 MSI 的原因一组关系型数据库表记录装什么文件、装到哪个目录、属于哪个组件、注册哪些注册表项等信息包括 File、Component、Feature、Property 等标准表。lessmsi 的聪明之处在于同时处理了这两层它借助项目自带的 WiX 库lib/目录下的 wix.dll、wixcab.dll解开 CAB 压缩流又自己实现了 MSI 数据库的读写逻辑核心代码在src/LessMsi.Core/Msi/如MsiDatabase.cs、Wixtracts.cs。所以它既能提取文件也能查看数据库内容这两件事在别的工具里往往要分开做。第二件事先拿到工具跑通第一条提取命令获取 lessmsi 的方式很直接——克隆仓库自行构建或直接下载编译好的发行包运行git clone https://gitcode.com/gh_mirrors/le/lessmsi工具按模块拆成了三个工程对应三种能力工程路径职责src/LessMsi.Cli/命令行接口脚本化和批量处理的主力src/LessMsi.Gui/图形界面适合浏览和交互操作src/LessMsi.Core/核心引擎MSI 数据库读取与文件提取逻辑拿到工具后先拿一个手头的安装包做冒烟测试。假设你有一个python-2.7.3.msi想把它全部解出来看看执行lessmsi x python-2.7.3.msi不带输出目录参数时文件会被解压到当前目录下与 MSI 同名的文件夹python-2.7.3\里目录结构保持安装包原始布局。命令行会打印每个文件的提取进度Extracting D:\msi\python-2.7.3.msi to D:\msi\python-2.7.3. 1/356 PFiles\Python\python.exe 2/356 PFiles\Python\DLLs\_ssl.pyd ...到这里lessmsi 的第一次提取就成功了。第三件事命令行四件套日常提取就靠它们lessmsi 命令行共有四类核心命令覆盖了绝大多数使用场景。相比其他工具靠一堆--参数拼选项它更偏好用不同命令表达不同意图。x保持目录结构的标准提取x是最常用的命令格式是lessmsi x msi文件 [输出目录\] [要提取的文件...]注意两个细节输出目录建议以反斜杠结尾这样工具才能正确识别它是目录如果省略默认使用 MSI 文件名作为目录名目录参数之后的参数都会被当作要提取的文件名。只想要安装包里的个别文件时直接跟在后面lessmsi x python-2.7.3.msi D:\out\ readme.txt LICENSE.txt文件路径带空格时用引号包住整个参数即可。xfo 与 xfr扁平化提取的两种姿势有些场景不想要那一长串目录结构比如只打算把所有 DLL 丢进同一个文件夹。这时有两个变体命令命令行为典型用途xfo扁平化提取同名文件直接覆盖只需最新版本目录无所谓xfr扁平化提取同名文件自动加序号重命名需要保留所有副本比如对比不同目录下的同名 DLLlessmsi xfo vcredist.msi D:\flat\ lessmsi xfr vcredist.msi D:\flat\前者遇到重名会覆盖后者会生成file_1.dll、file_2.dll这样的序号文件不会丢任何内容。l 与 v不提取也能看安装包l命令把 MSI 数据库里某张表的内容以 CSV 格式输出到终端适合脚本化分析lessmsi l -t Component python-2.7.3.msi lessmsi l -t Property python-2.7.3.msi输出是标准的表头 逗号分隔行可以直接重定向成文件再导入 Excellessmsi l -t File setup.msi file_table.csvv命令更省事直接打印安装包的 ProductVersion产品版本号做版本核对时很好用lessmsi v setup.msi最后o命令可以把 MSI 直接丢进图形界面查看h显示完整帮助。什么都不带直接运行也会打开图形界面。第四件事图形界面里的三个标签页命令行适合按计划执行图形界面则适合先看看再决定。用lessmsi o setup.msi或直接启动程序打开一个 MSI 后主界面分成三个标签页对应三种查看需求Files 标签页上图列出安装包内的所有文件包含文件名、目标目录、大小、版本等列。可以勾选需要的文件也可以点击 Select All / Unselect All 全选或反选然后指定输出目录点 Extract。这里的文件列表来自数据库的 File 表与 CAB 里的实际内容一一对应。Table View 标签页上图把 MSI 内部数据库表直接摊开给你看比如 Component 表里的组件名与 ComponentId 对应关系。做安装包分析的人经常在这里核对某个文件挂在哪个组件下。Summary Information 标签页上图展示安装包的元数据比如代码页、标题、作者、版本等键值对每条字段下方还有说明文字。看一个安装包是什么来头来这里最快。第五件事右键菜单把提取变成一键操作如果提取动作发生频率很高每次打开程序、选文件、点按钮还是有点繁琐。lessmsi 提供了 Windows 资源管理器集成在任意 .msi 文件上右键菜单里直接出现 Extract Files 选项点击后弹出目录选择框选完就自动提取全程不用打开主界面。这个功能不是默认开启的需要手动在菜单Edit → Preferences里勾选 Add Shortcut Item to Explorer 启用想移除时再进去点 Remove Shortcut Item 即可。相关实现位于src/ExplorerShortcutHelper/工程它负责注册和清理注册表里的右键菜单项。第六件事进阶玩法——分析安装包结构与批量处理用表视图读懂安装逻辑复杂安装包的安装逻辑藏在数据库表的关系里。一个常见的分析套路是用lessmsi l -t Property setup.msi看包的元数据属性用lessmsi l -t Component setup.msi列出所有组件用lessmsi l -t File setup.msi对照每个文件属于哪个组件、装到哪个目录在图形界面的 Table View 里交叉确认。这样即使不看厂商文档也能大致还原这个安装包到底动了哪些东西。一条批处理解压整个目录的 MSI批量场景建议直接写个批处理脚本把命令行串起来。下面的脚本会把当前目录下所有 .msi 依次提取到extracted\包名\文件夹echo off if not exist extracted mkdir extracted for %%f in (*.msi) do ( echo 正在处理: %%f lessmsi x %%f extracted\%%~nf\ ) echo 全部完成输出位于 extracted\ 目录 pause小提示%%~nf是批处理里取文件名不含扩展名的写法目录参数记得带反斜杠结尾。别忘了它还能处理 MSP 补丁除了 .msilessmsi 的测试套件里还包含大量 .mspWindows Installer 补丁包用例src/Lessmsi.Tests/TestFiles/MsiInput/目录下就能看到SQL2008_AS.msp、msxml5.msp等样本。也就是说补丁包同样可以查看和提取系统补丁分析场景同样适用。第七件事7 个常见坑与对应解法用久了就会发现lessmsi 报错和没反应大多集中在下面几个点上提前了解能省不少排查时间输出目录参数没以\结尾被当成文件名症状命令执行了但什么都没解出来。原因工具约定以反斜杠结尾的参数才是输出目录否则按要提取的文件处理。解法目录参数末尾补\或者干脆省略它用默认目录。MSI 路径或输出路径带空格症状报文件不存在或找不到路径。解法整个参数加英文引号如lessmsi x D:\my apps\setup.msi D:\out dir\。同名文件相互覆盖症状扁平化提取后文件数量比预期少。解法需要全部保留时改用xfr自动加序号不要用xfo。提取出的文件权限异常说明lessmsi 提取时会尽量保留文件原始属性覆盖系统文件前务必先备份原文件并在管理员权限下操作。怀疑提取结果不完整解法先lessmsi l -t File setup.msi对照数据库里的文件清单与实际输出确认是没这个文件还是没解出来。老安装包打不开可能原因个别非常古老的 MSI 格式与当前 WiX 库不兼容。解法换图形界面打开看具体报错或确认安装包来源是否损坏。批量脚本在某一个文件上中断解法批处理里给lessmsi加上|| echo 失败: %%f之类的错误记录跑完统一看失败清单而不是盯着屏幕。资料清单需要进一步查阅时项目本身是最好的文档命令行完整帮助直接运行lessmsi h命令行入口与命令注册src/LessMsi.Cli/Program.cs提取逻辑与进度回调src/LessMsi.Cli/ExtractCommand.cs核心引擎MSI 数据库、CAB 提取src/LessMsi.Core/Msi/图形界面主窗体与表格视图src/LessMsi.Gui/右键菜单集成src/ExplorerShortcutHelper/官方测试用例含 msi/msp 样本src/Lessmsi.Tests/TestFiles/MsiInput/一句话总结lessmsi 把从安装包里拿文件这件事做到了极致简单——命令行适合脚本化图形界面适合浏览分析右键菜单适合高频使用。下次再遇到只想要安装包里的某个文件先别急着双击安装想想老王那三分钟。【免费下载链接】lessmsiA tool to view and extract the contents of an Windows Installer (.msi) file.项目地址: https://gitcode.com/gh_mirrors/le/lessmsi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考