如何获取Windows软件安装信息

news/2024/11/8 18:28:40/

猜你感兴趣

  • 使用Pyqt5玩转ChatGpt
  • 内网文件共享服务
  • 快速搭建私有pip镜像源
  • python设计模式-创建型模式
  • docker搭建私有git服务器,项目备份和迁移
  • redis持久化方案

说明

windows注册表中有两支子健存储有所有程序的安装信息,因此我们可以通过访问注册表获取已安装软件信息

  • 64位:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall,如下图:
    在这里插入图片描述

  • 32位:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall,如下图:

在这里插入图片描述

代码实现

下面代码使用python3实现

class SoftwareManager:def __init__(self):self.sub_keys = [r'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',r'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall']self.__installed = self.__load_all_installed()def __get_value(self, each_key, name):try:value = winreg.QueryValueEx(each_key, name)[0]except Exception:value = Nonereturn valuedef __load_all_installed(self):installed = []for sub_key in self.sub_keys:with OpenKey(HKEY_LOCAL_MACHINE, sub_key) as sub_key_handle:for i in range(QueryInfoKey(sub_key_handle)[0]):try:each_key = OpenKey(HKEY_LOCAL_MACHINE, f'{sub_key}\\{EnumKey(sub_key_handle, i)}')except Exception as e:...else:DisplayName = self.__get_value(each_key, "DisplayName")if not DisplayName:print(DisplayName)continueinstalled.append({"DisplayName": DisplayName,"DisplayVersion": self.__get_value(each_key, "DisplayVersion"),"DisplayIcon": self.__get_value(each_key, "DisplayIcon"),"InstallDate": self.__get_value(each_key, "InstallDate"),"InstallLocation": self.__get_value(each_key, "InstallLocation"),"Publisher": self.__get_value(each_key, "Publisher"),})finally:each_key.Close()return installeddef get_all(self):"""获取所有安装列表:return:"""return self.__installeddef get_by_name(self, name):"""通过名字查找已安装软件:param name: :return: """one = [i for i in self.__installed if i.get('DisplayName') == name]return one[0] if one else Nonedef re_search(self, pattern, flags=0):"""通过正则搜索匹配项:param pattern: :param flags: :return: """return [i for i in self.__installed if re.search(pattern=pattern, string=i.get('DisplayName', ''), flags=flags)]	

调用

  • 通过名字获取已安装软件信息
manager = SoftwareManager()# 通过名字获取
wechat = manager.get_by_name("微信")
print(wechat['DisplayName'],  # 软件名wechat['DisplayVersion'],  # 软件版本wechat['InstallLocation'],  # 软件安装路径
)
  • 使用正则匹配搜索

manager.re_search('微信') # 返回匹配列表
  • 获取所有已安装软件
manager = SoftwareManager()
manager.get_all()  # 返回匹配列表
  • 返回示例:
[{'DisplayName': 'ApiPost Agent 1.1.0', 'DisplayVersion': '1.1.0','DisplayIcon': 'C:\\Program Files\\ApiPost Agent\\ApiPost Agent.exe,0','InstallDate': None,'InstallLocation': None,'Publisher': None},{'DisplayName': 'Apifox 2.1.34', 'DisplayVersion': '2.1.34','DisplayIcon': 'C:\\Program Files\\Apifox\\uninstallerIcon.ico','InstallDate': None,'InstallLocation': None,'Publisher': 'Apifox Team'}
]

http://www.ppmy.cn/news/960770.html

相关文章

29,stack容器

29.1stack基本概念 概念:stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口 栈容器 符合先进后出 栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为 栈可以判断容器为空与否(empty) 栈可以返回元素个数(…

ChatGPT引爆变革:第四个被颠覆的行业——新闻与媒体

随着ChatGPT技术的不断发展,新闻与媒体行业正面临前所未有的颠覆。在这个领域,ChatGPT可以高效地生成新闻报道、编辑文章、撰写评论,甚至提供实时的新闻动态更新。这将带来新闻传播的速度和效率的革命性提升,同时也可能带来对新闻…

物理层 ———— 奈氏准则 香农定理

1. 失真的现象----码间串扰 2.奈氏准则 eg: 3.香农定理 eg: 3.两个准则的比较

C语言——文件操作(超全超详细)

C语言——文件操作 1. 什么是文件 磁盘上的文件是文件 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的) 1.1 程序文件 包括源程序文件(后缀为.c),目…

ManGe对ChatGPT使用与学习的总结

经过这段时间对的ChatGPT的资料索搜,理论了解,实际操作和全网新闻的信息学习,总量了一些点: 要会提出准确需求便与ChatGPT理解ChatGPT只是辅助工具,还是得个人专业知识储备和业务经验目前辅助分析比较靠谱&#xff0c…

【CHATGPT-3.5】如何使用ChatGPT的同时并学习记忆

ChatGPT: ChatGPT可以为您提供答案和建议,但是它并不是一个完全替代您自己的大脑和记忆的工具。因此,以下是一些方法可以帮助您同时使用ChatGPT并进行学习和记忆: 将ChatGPT作为学习的一个补充:ChatGPT可以为您提供信…

利用ChatGPT场景化学习英语听说读写

大家好,我是可夫小子,关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加我,备注:chatgpt,拉你进群。 我们从初中就开始学习英语,到大学也有小十年,在这个过程中,我们投入了很…

ChatGPT编写贪吃蛇小游戏

现在最近对ChatGPT使用越来越热,ChatGPT的出现引发“一次新的社会变革”,不仅仅是输出文本,问答,做PPT、DOC、XMind的脑图,连写代码也是毫不夸张,现在基于ChatGPT3.5模型,使用python语言完成一个…