样子:

支持系统:

Windows NT 5.x/6.x 32及64位所有系统。需.net framework 2.0运行环境

功能:

清理上述系统中冗余的Windows Installer补丁文件。有如下特点:

  • 高效扫描+清理,并有进度反馈
  • 可选择清理指定文件
  • 可排序
  • 可选择删除到回收站,或直接删除

说明:

类似工具有几个,其中我熟知的是smallfrogs大牛的【Windows Installer 冗余文件清理工具】(下文称WIC),事实上在这之前我一直就用他的工具进行相关任务(目前他的官网http://www.kztechs.com/不可访问,可以通过第三方站点获取该工具及其信息),之所以想到重新写一个这样的工具,原因有二:

  1. WIC不适用64位NT6.x操作系统。不是说不能运行,而是会得到错误的结果,就是会扫出并非冗余的msp文件,这个很要命,属于关键性问题。我想是因为WIC编写年代久远,可能作者本就没有考虑在新平台使用。而造成这个问题的技术层面的原因我想是由于64位NT6系统对32位程序的注册表访问做了重定向的缘故,也就是32位程序访问某些键的时候,实际上是访问到别的键。例如此类工具需要访问的【HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Patches】,在64位系统上访问到的其实是【HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Patches】,关于这个问题,不少文章有讲解,在此不赘述。所以可能就因为这个原因,导致WIC在64位系统上访问到错误的键,又因为错误键下并不记录已安装的msp文件信息,最终导致WIC将大量并不是冗余状态的msp文件判定为冗余。
  2. WIC删除体验不好。这个谁用谁知道,就是删除一个文件前后共有2次MessageBox弹窗:删除前有1次询问,删除后有1次告知,而且是每一个文件都有两次弹窗,所以如果要删除10个文件,总共会遭遇10x2=20次弹窗,空格/回车俩表示压力很大。斗胆臆断,大牛在这个环节的处理有欠考虑啊。另外有用户表示还存在不能【全选/不选】的体验问题,这个倒其实好解决,得益于ListView控件(WIC应该不是.net程序,作者使用的编程框架下该控件可能不叫ListView,但我肯定它跟.net下的ListView都是调用同样的原生win32控件,spy++下显示为SysListView32)的能力,可以通过全选所有行+空格(或鼠标勾选)来达到全选/不选的目的,熟悉win系统的老鸟用户大概都知道类似的一些操作技巧,所以说这点不是问题。

就是以上两个原因让我有重造轮子的想法,所以可以说我对我这新工具的定位就是WIC的替代品,自然不存在WIC的问题,当然不排除我这工具也有其它问题,有句话叫什么来着,没有BUG的程序是什么也不做的程序。总之有赖用户的反馈,在此先行谢过。

另外我必须要说,即便WIC作为一个实现有些问题,但它的工作原理是了不起的,事实上我的工具也是基于大牛的冗余判定原理实现的,可惜现在他的官网不能访问,目前可以访问这里获知一些信息。再次郑重感谢smallfrogs大牛的研究和分享。另外要感谢:

  • 来自codeproject.com牛人的方案,它解决了ListView排序带原生标记(三角标记)的问题。排序容易,弄个自定义标记也不难,难的是系统原生标记
  • 各图标原作者。在此向猿友推荐一套高质量图标,作者似乎是个JP,程序UI向的设计师,作品真的很优质

工具地址:

http://pan.baidu.com/s/1i39w8Qh

望得到用户反馈,非常感谢!

-文毕-

【工具】清理Windows Installer冗余文件(支持64位NT6.x系统)的更多相关文章

  1. 使用WICleanup清理Windows Installer 冗余文件

    使用WICleanup清理Windows Installer 冗余文件 | 浏览:816 | 更新:2015-11-02 10:43 | 标签:Win7 Win10 1 2 3 4 5 6 7 分步阅 ...

  2. 给sql server2005打补丁报错:无法安装Windows Installer MSP文件

    给sql server2005打补丁报错:无法安装Windows Installer MSP文件 在我们安装完SQL2005数据库后,需要安装SP4补丁时,会出错:无法安装Windows Instal ...

  3. 字符转码开源库libiconv目前还不支持64位

    最新版的libiconv 1.14目前还不支持64位系统,只能编译出32位库. libiconv 1.14下载地址: http://ftp.gnu.org/pub/gnu/libiconv/libic ...

  4. 【电脑常识】如何查看电脑是32位(X86)还是64位(X64),如何知道硬件是否支持64位系统

    开始->运行->输入cmd确定->输入systeminfo 回车 待加载完成,就会看到如下信息(不同版本略有差异): 一.如何查看电脑是32位(X86)还是64位(X64) 方法2: ...

  5. 64位win8.1系统 运行 32位程序,文件夹路径是中文遇到问题

    今天有一位用户向我反应软件使用遇到问题. 用户使用的是64位win8.1系统,之前有很多用户使用64位的win8.1系统没遇到过问题. 远程协助了一下,差不多15分钟我试了几个办法没解决问题. 最后我 ...

  6. 判断电脑CPU硬件支不支持64位

    你可以在注册表中查看: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment\PROCESSO ...

  7. 检查DLL,EXE文件是64位或者32位的方法

    检查DLL,EXE文件是64位或者32位:输入corflags <assembly path>:

  8. [转]Windows10中Virtualbox没办法选择和安装64位的Linux系统

    本文转自:https://blog.csdn.net/strivenoend/article/details/78290325 明明在公司的WIN7系统中使用Virtualbox就可以安装64位的Ub ...

  9. VMware虚拟机下如何安装一个64位的win7系统

    原文地址:http://www.xitongcheng.com/jiaocheng/win7_article_21001.html VMware虚拟机软件可以在一台电脑上运行多个操作系统,一些网友想在 ...

随机推荐

  1. ubuntu 13.04下MYSQL 5.5环境搭建

    解决的问题: 安装mysql server和mysql client 5.5 新建远程账户 远程访问权限 MYSQL默认字符集修改为UTF8 检查防火墙 一.安装 BTW:可以使用查找命令查看安装包 ...

  2. C++ std::multiset

    std::multiset template < class T, // multiset::key_type/value_type class Compare = less<T>, ...

  3. i++ and ++i efficiency

    其实这个问题,百度的话,有一大堆的参考资料,但是,在这里,我产生了一些困惑,他们所分析的结果,和我的测试代码不一致,这让我纠结了,所以,再次的写一下这个问题,顺顺思路. 我的测试环境:系统:Windo ...

  4. Oracle日期语言修改

    -- value带有两个参数,第一个指下限,第二个指上限,将会生成下限到上限之间的数字,但不包含上限.select ceil(dbms_random.value(1000,9999)) from du ...

  5. Redis集群~StackExchange.redis连接Sentinel服务器并订阅相关事件(原创)

    回到目录 对于redis-sentinel我在之前的文章中已经说过,它是一个仲裁者,当主master挂了后,它将在所有slave服务器中进行选举,选举的原则当然可以看它的官方文章,这与我们使用者没有什 ...

  6. iOS-ARC项目使用非ARC文件 MRC项目使用ARC文件

    SDK4.0引入了ARC,到现在已经好几年了,开始发现有很多项目会混合使用这两个方案.比如: 1.自己的旧项目没有使用ARC,但是引入的第三方库却是使用了ARC的. 2.自己的新项目使用了ARC,但是 ...

  7. Android WebView 总结 —— Java和JavaScript交互

    交互如何实现 实现Java和js交互十分便捷.通常只需要以下几步. WebView开启JavaScript脚本执行 WebView设置供JavaScript调用的交互接口. 客户端和网页端编写调用对方 ...

  8. 学习ASP.NET MVC(三)——我的第一个ASP.NET MVC 视图

    今天我将对前一篇文章中的示例进行修改,前一篇文章中并没有用到视图,这次将用到视图.对于前一个示例中的HelloWorldController类进行修改,使用视图模板文件生成HTML响应给浏览器. 一. ...

  9. urldecode解码方法

    输入为带有urldecode转码文本,输出正常文本. //20130625 by zhangyl private string ConvertToString(string input) { inpu ...

  10. Java 集合 — ArrayList

    ArrayList ArrayList是基于数组实现的List 是有序的 每次添加之前判断是否进行扩容 不是线程安全的. 构造方法 // 空数组 private static final Object ...