Рубрики
Без рубрики

Найти установленное программное обеспечение с помощью Python

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Вы когда-нибудь задавались вопросом, какое программное обеспечение было установлено на вашем компьютере? Большинство людей, которые используют Windows, вероятно, перейдут добавить/удалить программы, чтобы узнать эту информацию, но они не программисты. Нет, программисты должны сценарировать это, потому что это просто в нашей крови, чтобы сделать это. У меня на самом деле у меня была еще одна причина сделать это: мой босс хотел, чтобы я был войти в систему, что было установлено на компьютерах нашего пользователя, поэтому мы знали, если наши пользователи устанавливают несанкционированное программное обеспечение. Таким образом, есть также практическая причина для попытки этого.

После некоторых исследований я обнаружил, что наиболее хорошо поведенское программное обеспечение хранит различные детали информации о себе в реестре Windows. В частности, они обычно хранят эту информацию в следующем месте: HKEY_LOCAL_MACHINE \ Программное обеспечение \ Microsoft \ Windows \ Centreversion \ Удаление

Следует отметить, что не все программы, которые вы устанавливаете, приведут эту информацию в реестре. У нас есть продавцы, которые не используют реестр вообще, например. Также, гнусные программы, такие как вредоносные программы, наверное, не поставит ничего там. Тем не менее, более 90%, так что это хороший способ получить информацию. Чтобы получить больше, вам, вероятно, нужно сделать какой-то каталог, прогуливаясь с модулем ОС Python, используя методы «прогулки» и ищут несоответствия из этого по сравнению с тем, что в реестре или, может быть, из некоторого сохраненного изображения, которое вы сохранили от девственницы Базовая машина.

Во всяком случае, достаточно разговоров. Давайте посмотрим на код! Примечание. Если вы хотите следовать, вам нужно будет скачать и установить Tim Golden’s WMI модуль Отказ

import StringIO
import traceback
import wmi
from _winreg import (HKEY_LOCAL_MACHINE, KEY_ALL_ACCESS, 
                     OpenKey, EnumValue, QueryValueEx)

softFile = open('softLog.log', 'w')
errorLog = open('errors.log', 'w')

r = wmi.Registry ()
result, names = r.EnumKey (hDefKey=HKEY_LOCAL_MACHINE, sSubKeyName=r"Software\Microsoft\Windows\CurrentVersion\Uninstall")

softFile.write('These subkeys are found under "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall"\n\n')
errorLog.write("Errors\n\n")
separator = "*" * 80
keyPath = r"Software\Microsoft\Windows\CurrentVersion\Uninstall"

for subkey in names:
    try:
        softFile.write(separator + '\n\n')
        path = keyPath + "\\" + subkey
        key = OpenKey(HKEY_LOCAL_MACHINE, path, 0, KEY_ALL_ACCESS) 
        try:
            temp = QueryValueEx(key, 'DisplayName')
            display = str(temp[0])
            softFile.write('Display Name: ' + display + '\nRegkey: ' + subkey + '\n')
        except:
            softFile.write('Regkey: ' + subkey + '\n')

    except:
        fp = StringIO.StringIO()
        traceback.print_exc(file=fp)
        errorMessage = fp.getvalue()
        error = 'Error for ' + key + '. Message follows:\n' + errorMessage
        errorLog.write(error)
        errorLog.write("\n\n")

softFile.close()
errorLog.close()

Это довольно короткий фрагмент, но здесь здесь много. Давайте распадаем это. Сначала мы импортируем модули, которые нам нужны, а затем открыть пару файлов: Softfile Будут хранить все программное обеспечение нашего сценария находит в «SoftLog.log», тогда как наша ErrorLog Переменная хранит любые ошибки, которые мы сталкиваемся в «ошибках .Log». Далее мы используем WMI для перечисления подразделения в клавише «Удалить». После этого мы пишем некоторую информацию о заголовке каждому файлу журнала, чтобы облегчить чтение.

Последний важный кусок происходит в структуре петли. Здесь мы цикла по результатам, возвращенным из нашего звонка WMI. В нашей петле мы пытаемся вытащить две части информации: отображаемое имя программного обеспечения и ключ, с которым он связан. Есть много другой информации, но там, кажется, нет никаких стандартов, которые придерживаются, поэтому я не схватил любой из этого. Вам понадобится более сложная обработка ошибок, чтобы извлечь его красиво (или, возможно, использовать генераторы некоторых как). Во всяком случае, если любая из кусков, которые мы пытаемся вытащить, не удается, мы ловим ошибку и продолжаю. Разработка вложенного исключения охватывает ошибку, связанную с получением отображаемого имени, тогда как обработчик внешнего исключения ловит ошибки, связанные с доступом к доступу к реестру. Мы, вероятно, должны сделать эти исключения явными (например, последний должен быть WindowsError, я думаю), но это просто быстрый и грязный сценарий. Не стесняйтесь продлить его столько, сколько вы считаете необходимым.

Если мы столкнулись с ошибкой в любом месте, мы что-то регистрируем. В вложенном случае мы просто регистрируем имя Regkey для «SoftLog.log», тогда как во внешнем корпусе мы просто регистрируем ошибку к «ошибкам. Log». В конце мы убираем, закрывая файлы.

Вот частичный образец того, что я получаю, когда я запускаю этот скрипт на моем компьютере Windows XP:

Эти подсказки найдены под «HKEY_LOCAL_MACHINE \ SPRACLE \ Microsoft \ Windows \ Centreversion \ Uninstall»

*************************************************************** *********************************************

Имя дисплея: Пакет драйверов Windows – Garmin (GRMNUSB) устройства Garmin (03/08/2007 2.2.1.0) Regkey: 45A7283175C62FAC673F913C1F532C5361F97841 ******************************************************************************************************************** *************************************************************** ******

Regkey: адресная книга ************************************************* **********************************

Имя отображения: Adobe Flash Player 10 ActiveX Regkey: Adobe Flash Player ActiveX **************************************** **********************************************

Имя отображения: Adobe Flash Player 10 Плагин Regkey: Adobe Flash Player Plugin **************************************** **********************************************

Имя отображения: python 2.4 adodb-2.00 regkey: adodb-py2.4 ************************************* **********************************************

Имя дисплея: агент Ransack Regkey: агент Ransack ******************************************* ***************************************

Имя отображения: Amazon Games & Software Downloader Regkey: Amazon Games & Software Downloader_is1 ************************************** **********************************************

Показать название: Amazon MP3 Downloader 1.0.3 Regkey: Amazon MP3 Downloader ***************************************** **********************************************

Имя отображения: Zonealarm Spy Blocker Toolbar Regkey: Ask Toolbar_is1 ******************************************** *******************************************

Имя дисплея: Assell English Persontionary-0.50-2 Regkey: Aspell English Dictionary_is1 *************************************************************************************************************************************** **********************************************

Теперь вы знаете, как извлечь большую часть программного обеспечения, установленного в поле Windows. Я проверил это в первую очередь на Windows XP с Python 2.5, но он должен работать на Windows Vista и 7 тоже. Windows 7 и Vista обычно заставляет пользователь по умолчанию работать с более низкими привилегиями, которые XP, поэтому вам может потребоваться запустить этот скрипт в качестве администратора или подкрепления администратора. Повеселись!