本文主要是介绍程序安装后在注册表中生成的安装信息解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
程序安装后在注册表中生成的安装信息解析
后来就打算研究一下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 程序名 可以删除程序的相关信息,包括程序目录,卸载包,所有注册表
作者:hgyxbll,原文链接: http://shashanzhao.com/archives/1031.html
这篇关于程序安装后在注册表中生成的安装信息解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!