Python 查询电脑安装程序的路径、版本

此博客介绍了如何通过Python脚本从Windows注册表中查找指定应用(如Chrome、Firefox)的安装路径和版本,通过RegKey操作和正则表达式实现,适用于软件开发者和系统管理员了解程序安装情况。
摘要由CSDN通过智能技术生成
# -*- coding: utf-8 -*-
import winreg
import re
import win32con, win32api




def find_exe_path(exe_name):
    try:
        path = None
        upper_keyword = exe_name.upper()
        sub_key = r'Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store'
        key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, sub_key, 0, win32con.KEY_READ)
        info = win32api.RegQueryInfoKey(key)
        for i in range(info[1]):
            value = win32api.RegEnumValue(key, i)
            exe_path = value[0].upper()
            if upper_keyword in exe_path:
                path = value[0]
                break
        return path
    except Exception:
        return None


def closeReg(key):
    winreg.CloseKey(key)

def openReg(key):
    return winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, key)

def queryVal(key, name):
    (value, type) = winreg.QueryValueEx(key, name)
    return value


def find_exe(keypath, softname):
    key = openReg(keypath)
    i = 0
    result = ""
    try:
        while 1:
            name = winreg.EnumKey(key, i)
            path = keypath + "\\" + name
            subkey = openReg(path)
            try:
                value = str(queryVal(subkey, 'DisplayName')).upper()
                if str(softname.upper()) in value:
                    value = queryVal(subkey, 'DisplayVersion')
                    result = value
                    closeReg(subkey)
                    break
            except:
                pass
            finally:
                closeReg(subkey)
            i += 1
    except:
        pass
    closeReg(key)
    return result


def get_exe_path_name_val(_name):
    try:
        keypath1 = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
        keypath2 = r"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
        exe_path = find_exe_path(_name)
        exe_val = None
        exe_name = None
        if exe_path:
            print('路径:%s'% exe_path)
            exe_path = (exe_path.replace('\\','\n'))
            if exe_path:
                exe_name = re.findall(r'\n(.+?).exe', exe_path)[0]
                print('程序名称:%s'% exe_name)
                exe_val = find_exe(keypath1, exe_name)
                if exe_val == "":
                    exe_val = find_exe(keypath2, exe_name)
                    if exe_val == "":
                        exe_val = find_exe(keypath2, _name)

        print('程序版本:%s\n'% exe_val)
        return (exe_path,exe_name,exe_val)
    except Exception as e:
        print('获取exe版本信息异常: %s'% e)
        return ('获取exe版本信息异常: %s'% e)




if __name__ == "__main__":
    get_exe_path_name_val('Chrome')
    get_exe_path_name_val('Firefox')
    get_exe_path_name_val('Python')

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值