财务发来一个msi,说想看看里面到底装了什么。双击就安装,右键也没有打开方式,资源管理器里连预览都没有。msi本质是个OLE复合文档,里面塞着文件流和数据库表,工具用错了只能看到一堆乱码,用对了就跟翻压缩包一样。
7-Zip:最快看到文件
装完7-Zip,右键msi选打开压缩包,能看到Binary、Icon、Media几个目录,文件都在里面,双击就能解出来。它的短板是不解析表结构,Property、Feature、Component这些表看不到。想知道安装时会写哪些注册表键,7-Zip给不了答案。只想从包里掏一个dll出来,用它最快,十秒完事。
LessMSI:文件和表一起看
LessMSI是个开源小工具,左边列文件树,右边直接给Table视图。Property表里的ProductCode、UpgradeCode、ProductVersion一眼能看到,想知道两个版本能不能覆盖安装,比一下UpgradeCode是否一致就够了。它的Extract按钮会把整个安装内容按目标目录结构还原出来,比用msiexec做管理安装省事,普通用户权限也能跑。
Orca:要改的时候才用它
Orca是Windows SDK自带的数据库编辑器,能直接改表,比如加一个自定义属性、去掉某个启动条件。改完必须重新签名,否则安装时报1922错误,域环境里还会被软件限制策略拦下来。改msi属于下策,能找厂商要带参数的包就别自己动手,改坏的包在卸载时会留下删不掉的注册表项。
不装任何软件的办法
系统自带的msiexec也能取内容:msiexec /a 包路径 /qb TARGETDIR=输出目录,等于做一次管理安装,把文件按目录释放出来但不写注册表。缺点是只出文件不出表,而且输出目录要有写权限。服务器上不许装第三方工具时,这是唯一的路子。
打不开的几种可能
用记事本打开看到乱码是正常的,开头那几个字节是D0CF11E0,说明它是OLE复合文档,不是文本。7-Zip提示无法作为压缩包打开,先对比文件大小,多半是没下载完整。把扩展名改成.zip也没用,两者格式根本不是一回事。还有一种情况是文件被加密或者加了权限,这时候只有原厂能解。
- 只想拿文件:7-Zip。
- 要查产品码和组件:LessMSI。
- 要改安装行为:Orca,改完签名并保留原包。