«правильный» и надежный способ получить все установленные программы Windows в Python? - PullRequest
10 голосов
/ 16 января 2010

Я видел множество способов получения установленных программ на 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 ]

8 голосов
/ 17 января 2010

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

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

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

3 голосов
/ 17 февраля 2015

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

...