«правильный» и надежный способ получить все установленные программы Windows в Python?

Я видел множество способов получения установленных программ на WinXP + в python. Каков правильный и самый надежный способ сделать это?

В настоящее время я обращаюсь к HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall и прочитайте каждый из ключей оттуда, чтобы получить список. (Мне сказали, что это не правильный способ делать что-то). Я видел примеры использования WMI / Win32com для этого, но видел комментарии вместе с теми реализациями, которые WMI может быть отключен на определенных машинах и что это не очень надежное решение.

Есть ли метод, который является правильным и надежным для получения списка установленных программ? Ни один из примеров WMI, которые я видел, не работал на этой машине (следовательно, мое нежелание использовать его, я использую только WinFLP, что является удаленным вариантом XP).

Кажется, я также нашел статью TechNet, в которой были обнаружены мои поисковые запросы, которые предоставляются аналогичному ответу на мой вопрос: http://gallery.technet.microsoft.com/ScriptCenter/en-us/154dcae0-57a1-4c6e- 8f9f-b215904485b7 Обратите внимание, что Vista / 7, перечисленные в разделе «Платформы», очень четко говорит «Нет» … не будет работать. Таким образом, сделка WMI выглядит так, будто она не работает …

Возможность получить установленный путь также будет иметь потенциал роста, так как сейчас мой текущий код не учитывает установку на другом диске или в каталоге, отличном от стандартного.

2 Solutions collect form web for “«правильный» и надежный способ получить все установленные программы Windows в Python?”

Сценарий технологов, на который вы ссылаетесь, отлично работает под Win 7 (с Python 2.5 32bits), и я действительно не понимаю, почему это не должно.

Фактически, реальная слабость подхода WMI заключается в том, что он отображает только продукты, установленные через установщик Windows. Так что это не даст вам полный список. Многие программы используют разные установщики. Просто сравните результаты между (Select * from Win32_Product) и тем, что отображается на панели управления. Таким образом, если вы не уверены, что программа, которая пересекает вас в вашем списке, установлена ​​с MSI, WMI определенно не является ответом.

Так что это может быть не очень pythonic, но, насколько мне известно, лучший способ – использовать реестр, как вы это делали. На самом деле это работает с панелью управления, поэтому, по крайней мере, Windows считает, что это самый надежный способ сделать это.

WMI – это правильный способ поиска установленных программ, поскольку он будет работать в разных версиях ОС и будет поддерживаться в будущем. Поиск определенных regkeys может отлично работать для определенных версий Windows, но не гарантированно будет работать в будущем. Вот простой код python для проверки Box Sync, который я только что пробовал в Windows 7. Обратите внимание, что не все поля будут доступны для каждого продукта, поэтому имейте в виду, что они будут «Нет».

 import wmi w = wmi.WMI() for p in w.Win32_Product(): if 'Box, Inc.' == p.Vendor and p.Caption and 'Box Sync' in p.Caption: print 'Installed {}'.format(p.Version) 

Недостаток, который я видел с WMI, очень медленно запускается.

  • Python - функция не может запускаться в новом потоке
  • как получить серийный номер драйвера жесткого диска в python
  •  
    Interesting Posts for Van-Lav

    plot () не работает на ноутбуке IPython

    Настройка сообщения об ошибке для определенных исключений в pytest

    Python и py2exe – Имплантируемый импорт модулей

    pip throws TypeError: parse () получил неожиданный аргумент ключевого слова 'transport_encoding' при попытке установить новые пакеты

    Отправка запросов и очистка результатов из страниц aspx с помощью python?

    Как получить файл HTML с помощью Python?

    как добавить аннотационные данные в ответы на запрос ответа django-rest-framework?

    Построение 3d-поверхности из списка кортежей в matplotlib

    Возможно ли получить количество строк в документе Excel без загрузки всего документа в память?

    iPython: Ошибка загрузки DLL: указанный модуль не найден; простой Python fine

    Чистый вызов виртуальной функции

    Как сохранить данные в таблице cassandra, используя искру saveToCassandra?

    Простой пример использования ffmpeg в качестве подпроцесса Python и «проверка» на преобразовании

    Сгенерировать временную последовательность с шагом 7 секунд

    Чтение двоичных данных Python

    Python - лучший язык программирования в мире.