注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

抓住青春的尾巴

好久不玩这东西了

 
 
 

日志

 
 
关于我

一会儿写写程序、一会儿摄摄影、再一会儿干干家务做做饭……

网易考拉推荐

学习msi安装包内文件替换笔记  

2016-11-21 15:59:55|  分类: IT |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
最近为了方便自己,学习处理msi包内文件
首先仔细阅读了下面链接的文章。
http://teach.hanzify.org/article/652-1233562028.html
然后开始动手了。
某多媒体教室软件,160M的大小
直接在7z中打开如图
学习msi安装包内文件替换笔记 - 嘿嘿 - 抓住青春的尾巴
 
 之所以这么大的安装包,原来是加入了多国语言资源文件
而我只需要_ZH_CN文件,其他都不要,这样应该就可以减小安装包的体积了。
由于这个软件在msi的外面还加了个exe的壳,所以首先得把msi提取出来
运行该exe安装程序。在任务管理器中发现多了个msiexec.exe进程
通过图中所用命令查看该进程的运行参数
学习msi安装包内文件替换笔记 - 嘿嘿 - 抓住青春的尾巴
 如上图发现msiexec.exe进程是执行了临时目录中的msiE46D.tmp这个文件,同时后面还有一串参数。
去临时目录找到该文件,通过文件大小初步判断就是我要提取的msi文件了。拷贝一份出来,关闭安装程序界面。
再用上图所用参数执行这个文件,同样出现了程序安装界面,到这里就确定了msiE46D.tmp的身份。
注意:每次运行原版安装程序生成的临时文件名可能不一样
为了方便处理把这个临时文件改名成teacher.msi
有了msi安装包,现在就参照教程对msi安装包进行修改。
教程说要提取cab文件,其实这个msi是可以直接用7z打开的,所以提取cab这一步可以免了。
直接用7z打开,将其中的文件解压到一个文件夹中待处理。
※关键点:
1、CAB中的文件顺序要和MSI的文件表中的文件顺序保持一致。
这条很重要,所以我在处理不需要的文件时,就没有直接删除,而是用同名0字节文件替换的如图
学习msi安装包内文件替换笔记 - 嘿嘿 - 抓住青春的尾巴
 如上图,除了中文语言不改,其他用0kb文件替代。
把解压出来的这些文件处理好后,接下来就是再次打包成cab了
※关键点:
1、CAB中的文件顺序要和MSI的文件表中的文件顺序保持一致。
现在得把msi包中的文件表找出来,使用msidb.exe打开msi文件
学习msi安装包内文件替换笔记 - 嘿嘿 - 抓住青春的尾巴
 按照上图步骤导出msi中的文件表File.idt,用excel或wps表格打开File.idt
 A列File就是cab内的文件名,H列Sequence就是这些文件在CAB中的顺序
 学习msi安装包内文件替换笔记 - 嘿嘿 - 抓住青春的尾巴
 排除1,2,3行,对所有数据以H列为参照进行升序排列,排序后将A中的所有文件名列表复制出来
学习msi安装包内文件替换笔记 - 嘿嘿 - 抓住青春的尾巴
 如上图将排序后的文件名列表复制到一个0Filelist.txt文件中备用。
再看教程中的这段
学习msi安装包内文件替换笔记 - 嘿嘿 - 抓住青春的尾巴
 如图使用上面的命令配合我们刚才的0Filelist.txt文件即可按顺序生成符合要求的cab文件了。
这样新的cab就处理好了,只有21M。
接下来就是用新的cab去替换msi中原来的cab包了。教程原话
首先,在DOS下或MsiDb.exe快捷方式下,使用“MsiDb.exe -k CAB文件名 -d MSI文件名”命令删除MSI文件中的CAB文件(其实只是清除关联)。然后使用“MsiDb.exe -a CAB文件名 -d MSI文件名”命令插入新的CAB文件到MSI文件中。
注意:cab的名称可以用ORCA查看原包中的名称,然后把新制作的cab也改成这个名称
这样做后,体积是不会减小的。要减小体积还得想办法。
教程上说可以用ORCA打开msi另存为新的msi不包含任何cab的小体积msi,再使用 MsiDb.exe -a CAB文件名 -d MSI文件名将新的cab附加到msi中。
我这样做了,体积是降减下来了,但是测试安装包时不能正常安装。可能是这个安装包比较特殊,本身使用了参数运行才能调出安装界面。而ORCA在另存为时可能丢失了某些信息。
后来我发现msi的安装包在安装程序后,都会在C:\windows\installer中留下卸载用的msi程序。
于是去C:\windows\installer中寻找,遗憾的是C:\windows\installer里的相关msi程序竟然与前面提取的msi一样大小。
不死心啊,还好我的vm中有多个系统,刚才是在win7中找的,之后去xp的C:\windows\installer中寻找,简直太惊喜了,这里找到的相关msi只有几百KB,终于完美了,使用这里的msi再附加上新制作的cab,测试安装成功。

因为这个msi是要用到参数启动的,所以用批处理那执行他。当然也可以用个exe加个壳来执行。
  评论这张
 
阅读(237)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017