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

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

В настоящее время я обращаюсь HKLMSOFTWAREMicrosoftWindowsCurrentVersionUninstall и значение каждого из ключей оттуда, чтобы получить список. (Мне сказали, что это не правильный способ делать вещи) я видел примеры использования WMI / Win32com для этого, но видел комментарии вместе с теми реализациями, которые WMI могут быть повернуты на некоторых машинах и это не очень надежное решение.

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

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

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

2 ответов


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

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

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


WMI-это правильный способ поиска установленных программ, поскольку он будет работать в разных версиях ОС и будет поддерживаться в будущем. Поиск определенных regkeys может отлично работать для определенных версий Windows, но не гарантируется в будущем. Вот простой код python для проверки синхронизации, который я только что пробовал в 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)

обратная сторона I видел с WMI это очень медленно, чтобы начать.