经常碰到程序无法卸载, 就老是骂微软搞的什么安装方式,安装好了不能卸载.

后来就打算研究一下windows是如何卸载程序的,一个程序安装完后留下了什么信息用于后面的卸载.

研究对象win7 64位, 程序npviewinie.

程序安装后生成的最主要的注册表项是在以下三个中

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall     64位程序

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall   32位程序

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall    安装到当前用户的程序,安装时不需要管理员权限

比如HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{43DCBFFE-81BE-4077-8F84-E32DB69C6979}

{43DCBFFE-81BE-4077-8F84-E32DB69C6979}是程序的唯一ID,固定的,在{43DCBFFE-81BE-4077-8F84-E32DB69C6979}里有程序的概要信息,比如:

DisplayName: npviewinie    程序名字,如果为空则不会显示在卸载程序列表里面

InstallLocation: D:\Program Files\npviewinie\   程序安装位置

UninstallString:  MsiExec.exe /X{43DCBFFE-81BE-4077-8F84-E32DB69C6979}   程序卸载命令

如果安装信息全都放在这里那就简单了,可是微软搞的很复杂,它把这里当成索引,在其他地方放了其他的东西.

其他地方保存了程序的相关信息,主要有以下几处:

# => HKEY_CLASSES_ROOT\Installer\Components
# => HKEY_CLASSES_ROOT\Installer\Features
# => HKEY_CLASSES_ROOT\Installer\Patches
# => HKEY_CLASSES_ROOT\Installer\Products
# => HKEY_CLASSES_ROOT\Installer\UpgradeCodes # => HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components
# => HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products
#=> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UpgradeCodes # => HKEY_CURRENT_USER\Software\Microsoft\Installer\Features
# => HKEY_CURRENT_USER\Software\Microsoft\Installer\Products
# => HKEY_CURRENT_USER\Software\Microsoft\Installer\UpgradeCodes 看吧,复杂吧,其中联系它们在一起的是那个唯一ID,而且是压缩过,比如刚才那个压缩成了EFFBCD34EB187704F8483ED26BC99697. 其中有几个比较重要的需要提一下: 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\EFFBCD34EB187704F8483ED26BC99697\InstallProperties下 LocalPackage: C:\Windows\Installer\1645971.msi 这个C:\Windows\Installer\1645971.msi就是卸载包的位置,如果这个丢了(网上的精简系统方法可能会涉及到这个),那么卸载失败的机会就降了一半. 另一半的机会在安装包还存在的情况.安装包的名字记录在: HKEY_CLASSES_ROOT\Installer\Products\EFFBCD34EB187704F8483ED26BC99697\SourceList PackageName: npviewinie_zh_1.6.6.msi 位置记录在: HKEY_CLASSES_ROOT\Installer\Products\EFFBCD34EB187704F8483ED26BC99697\SourceList\Net 1: E:\code\npviewinie\doc\Install\1.6.6\ 位置不正确不要急,因为它找不到就会让你选择位置的. 总结: 1. 不要随便动C:\Windows\Installer目录下的东西,虽然它越来越大 2. 能用正常卸载最好 3. 如果不能正常卸载,在强制卸载的时候,最好找到所有注册表然后一起删除,尤其不要忘了那个在C:\Windows\Installer下的文件. 如果手动查找麻烦,那么建议只删除那个主要注册表,然后再重装一次软件,再删除. 4. 上面关于强制卸载时用重装软件的建议有一个小问题,在重装软件之后,所有的注册表跟之前是一样的,但有个东西不一样,那就是在C:\Windows\Installer目录下的文件名,这样就导致之前的那个文件完全失去了联系.真的成为了孤魂野鬼. 5.还有一种方法.我写了一个脚本来强制删除这些注册表和文件,需要会运行脚本的人,脚本使用附录有介绍. 附录: 1. npviewinie程序从注册表中获取的所有相关注册表和文件信息 安装目录: D:\Program Files\npviewinie\
安装文件目录: E:\code\npviewinie\doc\Install\1.6.6\
卸载命令: MsiExec.exe /X{43DCBFFE-81BE-4077-8F84-E32DB69C6979}
主要注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{43DCBFFE-81BE-4077-8F84-E32DB69C6979}
卸载文件路径: C:\Windows\Installer\1645971.msi
安装包文件路径: E:\code\npviewinie\doc\Install\1.6.6\\npviewinie_zh_1.6.6.msi
其他相关注册表:
HKEY_CLASSES_ROOT\Installer\Features\EFFBCD34EB187704F8483ED26BC99697
HKEY_CLASSES_ROOT\Installer\Products\EFFBCD34EB187704F8483ED26BC99697
HKEY_CLASSES_ROOT\Installer\UpgradeCodes\D970B879D13D71644B1842FAEEAD2150
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UpgradeCodes\D970B879D13D71644B1842FAEEAD2150
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\EFFBCD34EB187704F8483ED26BC99697
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\00DA8AC25B115D14E82A2D938699DD78
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\0C86DB1A2A425AA4ABDD342F238B3D58
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\439BCBF3DBE6C264F8A83C86B199B574
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\7B6F588AB8E7D4F4EB92A12CB7A8EB7C
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\8BAFF9E2E57CD2E409B6A3B513EAABD0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\A02CBC3755662E04EA045A3ECE68D2AF
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\AD2FEFFDA9B68E44AA18B440BA31F000
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\CC166F7311E02514B80CC34BF06B5DE8 2.脚本介绍 脚本下载地址: http://pan.baidu.com/s/1c0rMeuG 其中: list_all_installed_program.rb 可以列出所有安装的程序的名字 check_installed_program_health.rb 程序名 可以检查程序是否可以卸载或程序是否还存在 check_installed_program_health.rb -v 程序名 可以查看程序的相关信息 check_installed_program_health.rb -d 程序名 可以删除程序的相关信息,包括程序目录,卸载包,所有注册表

  

C++对windows控制面板的操作的更多相关文章

  1. C#操作Windows控制面板

    先介绍一下Windows控制面板的一些操作,再介绍如何用C#语言来操作控制面板. 1.如何快速打开控制面板中的项目: 运行输入(大小写不敏感) control system 打开系统信息 contro ...

  2. Windows 控制面板调用命令

    使用命令打开 Windows 控制面板指定页面 control.exe /name microsoft.folderoptions 启动资源管理器的 文件夹属性 选项卡 control.exe /na ...

  3. windows系统快捷操作の进阶篇

    上次介绍了windows系统上一些自带的常用快捷键,有些确实很方便,也满足了我们的一部分需求.但是我们追求效率的步伐怎会止步于此?这一次我将会进一步介绍windows上提升效率的方法. 一:运行 打开 ...

  4. windows系统快捷操作の基础篇

    从网上汇总了一些windows系统上常用的快捷键,结合自己的使用经验,将平时使用电脑时最常用的快捷键记录在此.注意这里罗列的是平时最常用到的,其他的一般来说不怎么用到的并不在此列,如果想要完整列表,请 ...

  5. Windows的拖放操作使用方法

    Windows的拖放操作使用方法

  6. Windows内核下操作字符串!

    * Windows内核下操作字符串! */ #include <ntddk.h> #include <ntstrsafe.h> #define BUFFER_SIZE 1024 ...

  7. Windows Services Windows Services的操作

    Windows Services的操作 一.服务的创建: 1.新建项目——Windows服务 2.这是每个人都会犯的错误,新建一个项目后,都会按F5(运行),就会出现如下错误: 3.安装服务有很多种方 ...

  8. windows下Eclipse操作MapReduce例子报错:Failed to set permissions of path: \tmp\hadoop-Jerome\mapred\staging\

    windows下Eclipse操作MapReduce例子报错: 14/05/18 22:05:29 WARN util.NativeCodeLoader: Unable to load native- ...

  9. windows 命令行操作 Mysql 数据库

    1 前言 有接手一个新项目,项目中到了 Mysql 数据库 ,这里总结下 windows 命令行操作 Mysql 数据库. 2 Cmd操作数据库 2.1 连接Mysql服务器,命令如下:(root用户 ...

随机推荐

  1. 开源流媒体服务器SRS学习笔记(3) - HTTPCallback实现安全认证

    按上回继续,安全论证是绝大多数应用的基本要求,如果任何人都能无限制的发布/播放视频,显然不适合.SRS中可以通过HTTPCallback机制来实现,参考下面的配置: ... vhost __defau ...

  2. C#修改文件名方法

    static void Main(string[] args) { string srcFileName = @"c:\order.txt"; string destFileNam ...

  3. centos下安装wireshark 抓包

    centos下安装wireshark相当简单.两条命令就够了.这里.主要是记录写使用方面的东西 安装:1.yum install wireshark.注意这样并无法使用wireshark命令和图形界面 ...

  4. Kubernetes中资源配额管理

    设置资源请求数量 创建Pod的时候,可以为每个容器指定资源消耗的限制.Pod的资源请求限制则是Pod中所有容器请求资源的总和. apiVersion: v1 kind: Pod metadata: n ...

  5. netty源码解析目录

    第一章 java nio三大组件与使用姿势 二.netty使用姿势 三.netty服务端启动源码 四.netty客户端启动源码 五.NioEventLoop与netty线程模型 六.ChannelPi ...

  6. python接口自动化测试(七)-unittest-批量用例管理

    我们日常项目中的接口测试案例肯定不止一个,当案例越来越多时我们如何管理这些批量案例?如何保证案例不重复?如果案例非常多(成百上千,甚至更多)时如何保证案例执行的效率?如何做(批量)测试数据的管理?如何 ...

  7. Delphi如何创建并绘制EMF图形文件

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  8. HADOOP security

    https://www.microsoft.com/en-us/trustcenter/security/azure-security https://docs.microsoft.com/en-us ...

  9. lombok自带的slfj使用方法

    1.pom.xml <dependency> <groupId>org.projectlombok</groupId> <artifactId>lomb ...

  10. HMACSHA1 加密算法

    https://blog.csdn.net/z69183787/article/details/78393216 ******************************************* ...