- #coding:utf-8
- import _winreg
- import sys
- import os
- import shutil
- def getmsiinfo(name):
- i=0
- msi_info={}
- user=[]
- key=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,r'SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData')
- try:
- while1:#目前只循环一级subkey=_winreg.EnumKey(key, i)
- user.append(subkey)
- i +=1except:
- pass
- formsikeyin user:
- j=0
- filekey=msikey
- msikey=msikey+r"""\Products"""
- deltmp=msikey
- msikey=_winreg.OpenKey(key,msikey)
- try:
- while1:
- #得到name和productinfokey=_winreg.EnumKey(msikey, j)
- msi_info['product']=infokey
- infokey=infokey+r"""\InstallProperties"""
- infokey=_winreg.OpenKey(msikey,infokey)
- (msiname, type) = _winreg.QueryValueEx(infokey,"DisplayName")
- msi_info['name']=msiname
- #得到卸载项(unin, type) = _winreg.QueryValueEx(infokey,"UninstallString")
- unin=unin[14:]
- msi_info['unin']=unin
- ifmsi_info['name']==name:
- deletelist.append('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\\'+deltmp+'\\'+msi_info['product'])
- deletelist.append('HKEY_CURRENT_USER\Software\Microsoft\Installer\Products\\'+msi_info['product'])
- deletelist.append('HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products\\'+msi_info['product'])
- deletelist.append('HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Features\\'+msi_info['product'])
- deletelist.append('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\\'+msi_info['unin'])
- (file, type) = _winreg.QueryValueEx(infokey,"LocalPackage")
- deletelist.append(file)
- filekey=filekey+'\\'+'Components'+'\\'+msi_info['product']
- filekey=_winreg.OpenKey(key,filekey)
- (file, type) = _winreg.QueryValueEx(filekey, msi_info['product'])
- deletelist.append(file)
- deletelist.append('C:\\Windows\\Installer\\'+msi_info['unin'])
- return msi_info
- else:
- j +=1except:
- pass
- def delmsi(list):
- foritemin list:
- print item
- try:
- ifitem.find('.')!= -1:
- os.remove(item)
- elifitem.find(':')!= -1:
- shutil.rmtree(item,True)
- elifitem.find('HKEY')!= -1:
- print item
- tmpl=item.split('\\',2)
- key=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,tmpl[1])
- _winreg.DeleteKey(key,tmpl[2])
- except:
- pass
- if __name__=="__main__":
- name=sys.argv[1]
- deletelist=[]
- getmsiinfo(name)
- delmsi(deletelist)
来源: http://www.bubuko.com/infodetail-1966996.html