欢迎光临 Enjoy IT (ITECN.NET) 登录 | 注册 | 帮助

冗余 Windows Installer 文件的清理

对于使用 Windows Installer 技术制作的安装程序,我一向不是那么的喜好,即使 Windows Installer 技术有着非常优秀的功能、稳定的性能以及其他值得骄傲的特性。

究其原因,是因为使用 Windows Installer 技术制作的安装程序会在 %systemroot%\Installer 目录里面添加一个备份的安装文件用于今后的配置、补丁安装等操作。不可否认的是,在系统里面存放一个安装程序的备份,是一件非常理想的事情,尤其是对于那些经常丢失安装程序的用户来说。对于这一点,我倒是非常的赞赏。但是,有一个功能我的确难以理解:当用户运行一个补丁程序的时候,Windows Installer 将msp文件释放到 %systemroot%\Installer 目录以后,开始引导用户进行补丁的安装。如果用户在引导的时候点击了取消操作或补丁安装必备条件不足而导致安装失败的时候,Windows Installer 将退出安装流程,但是会把释放到 %systemroot%\Installer 目录里面的msp文件保留下来。如果用户再次运行同一个补丁程序,Windows Installer 又会在 %systemroot%\Installer 目录里面生成一个新的msp文件(文件名和上一次的不同),而不会利用上一次释放产生的msp文件。这样一来,第一次产生的msp文件将会永久的存留在磁盘上,成为彻底的无用文件。

为了解决这个问题,我决定找回被Windows Installer无用文件占用的磁盘空间。对 Windows Installer 补丁技术研究以后发现,如果补丁安装成功,会在注册表里面记录一个信息,当新的增量补丁程序需要旧的补丁程序的时候,会在注册表里面寻找旧的信息,并找到旧的msp文件,然后就是补丁文件的整合以及修补过程。具体的步骤比较复杂,这里不予多说。我们需要的是将
%systemroot%\Installer 目录里面无用的文件挑选出来,其他的流程和本次主题无关。

冗余MSP文件清除原理:
1、MSP安装完成以后,会在注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Patches 下面生成一个键。键名是一个32字节的GUID值,生成的键下会有一个键值,名称固定为 LocalPackage 用于指向本地的 MSP 文件的路径。
2、记录下每一个键下的
LocalPackage 指向的文件的文件路径。
3、然后打开
%systemroot%\Installer 目录,将这个目录根目录下的所有 MSP 文件挑出,除去在第2步中存在的文件名,剩下的MSP文件就是冗余的文件。

*注:
S-1-5-18指 Local System 用户,大多数补丁都是以 S-1-5-18 安装的。

自动化清理方案:
如果系统里面安装了很多使用 Windows Installer 技术制作安装程序的软件以及相应的补丁以后,
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Patches 下面会产生相当多的子键,手工清理是不现实的,自动清理才是必要的途径,工具 WICleanup.EXE 应运而生。

WICleanup.EXE:针对上述问题提供自动化解决方案,运行以后会自动完成上述的所有操作。(本来就是我写的,当然会按照上述流程进行了。

WICleanup.EXE 下载地址:http://www.kztechs.com/wicleanup/

WICleanup.EXE 截图:





已发表 2006年10月22日 21:28 作者 smallfrogs

评论

# re: 冗余 Windows Installer 文件的清理

2006年10月22日 22:04 by clippit
支持!C盘的空间就是这样一点一点被蚕食掉的

# re: 冗余 Windows Installer 文件的清理

2006年10月23日 9:38 by 菜菜
我是一个菜鸟,不知这种清理方式是否安全,能否做成互动窗口式,并且显示和备份清理的内容,这样就大大放心了。不知说的是否合适,请见量。

# re: 冗余 Windows Installer 文件的清理

2006年10月23日 15:08 by Arael
Great! 早就看它们不爽了……
3x

# re: 冗余 Windows Installer 文件的清理

2006年10月24日 0:31 by smallfrogs
TO 菜菜

已经提供了4种模式:报告模式、改名模式、带提示删除模式、静默删除模式。

你自己试试再说

# re: 冗余 Windows Installer 文件的清理

2006年10月24日 10:11 by 菜菜
TO Smallfrogs
怪不得我叫菜菜呢,没仔细看它需要在DOS窗口运行。谢谢您写出这么好的工具。希望它更加强大。

# re: 冗余 Windows Installer 文件的清理

2006年10月27日 18:35 by jack
太好了,早就想对那些东西下手了,就是不知道要怎么弄,这下方便了,顺便问句:能把这个工具也整合到SRENG里去吗?
还有关于SRENG插件,能提供一些吗?

# re: 冗余 Windows Installer 文件的清理

2006年10月27日 18:56 by jack
没有找到???怎么回事啊。2003系统!
请看图:
http://blog.bitscn.com/UploadFiles/2006-10/1027261262.jpg

# re: 冗余 Windows Installer 文件的清理

2006年11月1日 2:33 by smallfrogs
TO jack

1.X 2.X 版本只针对msp文件,从3.X版本开始加入对msi文件的处理。

即使增加了对Msi文件的处理,也不一定能够扫描到,这个和用户的使用方式以及软件本身有关。

至于插件,我会考虑的,呵呵

# re: 冗余 Windows Installer 文件的清理

2006年11月1日 19:57 by StarLight
我刚开始学习VC2005不过我用的是轻量的免费版的,但是功能对我来说已经够用了,不知道我甚么时候能开发出这样的软件呢……我之前用过一个基于.NET Framework的软件叫《WinXP总管》提供了很多小的可爱的插件(^_^),希望作者可以去试用以下,希望能给作者些许灵感,让这款清理软件锦上添花。

# re: 冗余 Windows Installer 文件的清理

2006年11月22日 14:56 by 小废物
博主你好^_^
我是51CTO技术博客的大管家,博友向51CTO博采众客栏目推荐了您这篇《冗余 Windows Installer 文件的清理》。
“博采众客”收录来自各个博客的优秀原创文章,链接直接指向您的博客文章。希望我们的推荐能让更多的博友分享您的作品!

博采众客的参与者都有机会获得奖品,详情请见:
http://51ctoblog.blog.51cto.com/blog/26414/9910

如果您不希望被我们推荐,请以登陆名回复说明,并发邮件至blog@51cto.com,我们会取消对您的链接,谢谢!

# re: 冗余 Windows Installer 文件的清理

2007年1月11日 2:34 by 菜鸟

   我是个不知道怎样清理磁盘的人。如果知道的请告诉我。谢谢

该帖子已禁止评论