/
burevol
/
MMC_Switcher
Обзор
Документация
Войти
/
burevol
/
MMC_Switcher
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
utils/software_list.py
59 строк
2 KB
Александр Максимов
Сортировка и получение информации о старых версиях
06 ноя 2024, 16:47
06 ноя 2024, 16:47
b35bb98
Код
Авторство
О чём код?
import winreg import enum sources = [ [ winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall", ], [ winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", ], [ winreg.HKEY_CURRENT_USER, r"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", ], ] class ReadMode(enum.Enum): KEY = 1 VALUE = 2 def read(key, mode): i = 0 while True: try: if mode == ReadMode.KEY: yield winreg.EnumKey(key, i) elif mode == ReadMode.VALUE: yield winreg.EnumValue(key, i) i += 1 except OSError: break def read_registry(key_type, registry_key_path): registry = winreg.ConnectRegistry(None, key_type) registry_key = winreg.OpenKey(registry, registry_key_path) for subKeyName in read(registry_key, ReadMode.KEY): sub_key = winreg.OpenKey(registry, f"{registry_key_path}\\{subKeyName}") values = {} for subKeyValue in read(sub_key, ReadMode.VALUE): values[subKeyValue[0]] = subKeyValue[1] yield values def installed_apps(): names = [] versions = [] for source in sources: for data in read_registry(source[0], source[1]): if ("DisplayName" in data and "DisplayVersion" in data and "InstallLocation" in data and data['DisplayName'].find('Предприятие') != -1 and data['DisplayVersion'] not in versions): names.append({'name': data['DisplayName'], 'version': data['DisplayVersion'], 'install_location': data['InstallLocation']}) versions.append(data['DisplayVersion']) return sorted(names, key=lambda x: x['version'])