首页 > 编程语言 > 详细

【原创】用python脚本在windows系统下收集msi的安装信息

时间:2017-03-03 01:47:21      阅读:317      评论:0      收藏:0      [点我收藏+]

接到个任务,要写一个脚本收集msi安装文件在windows下面的安装信息。

第一步:读取注册表识别出存在的msi。

由于msi在windows下面都是有一套统一的安装规则,我们可以识别HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\{userid}\

第二步:收集所有msi的安装信息

第三步:删除

 

 

整个代码如下:

#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,rSOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData)
    try:
        while 1: #目前只循环一级
            subkey=_winreg.EnumKey(key, i)
            user.append(subkey)
            i +=1
    except:
        pass
    for msikey in user:
        j=0
        filekey=msikey
        msikey=msikey+r"""\Products"""
        deltmp=msikey
        msikey=_winreg.OpenKey(key,msikey)
        try:
            while 1:
                #得到name和product
                infokey=_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
                if msi_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 +=1
        except:
            pass

def delmsi(list):
    for item in list:
        print item
        try:
            if item.find(.)!= -1:
                os.remove(item)
            elif item.find(:)!= -1:
                shutil.rmtree(item,True)
            elif item.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)

 

【原创】用python脚本在windows系统下收集msi的安装信息

原文:http://www.cnblogs.com/liyangqiu/p/6493325.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!