Существуют различные методы поиска установленных приложений в системе, но, насколько мне известно, ни один из них не возвращает точно такой же список, как элемент панели управления «Добавить и удалить программы». Вот несколько способов, которые я пробовал:
Например, у меня 217 записей в AR и
gwmi Win32_Product
возвращает 261 элемент.
gp HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*, HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | ? {![string]::IsNullOrWhiteSpace($_.DisplayName) } | select DisplayName
возвращает 119 позиций.
(gwmi Win32Reg_AddRemovePrograms) + (gwmi Win32Reg_AddRemovePrograms64) | sort DisplayName -Unique
возвращает 107 предметов.
Я попытался решить эту проблему с помощью более сложного фильтра, который включал InstallLocation
, InstallSource
, InstallDate
и т. д. без успеха.
Для меня это неудачный случай Закон Конвея. Windows - очень сложная ОС с десятилетиями истории и огромным количеством движущихся частей. Это означает, что что-то кажется простым, например, задать вопрос «wtf all is installed on my computer?» к сожалению сделано очень сложно. «Установленное программное обеспечение» усложняется тем, что оно поступает из нескольких разных источников. Есть 64-битное программное обеспечение, 32-битное программное обеспечение, и программное обеспечение, которое устанавливается только для определенных пользователей, и программное обеспечение, которое устанавливается для всех пользователей, и программное обеспечение, которое было установлено или назначено вам через групповую политику, и многое другое.
К счастью, Монитор процессов Sysinternal может раскрыть вам их все. Просто запустите его, отслеживайте события реестра, а затем самостоятельно щелкните апплет панели управления «Установка и удаление программ» и посмотрите, что Windows делает в фоновом режиме.
Он читается из разных источников:
HKLM\Software\Installer\Products
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall
HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\...
HKCU\Software\Microsoft\Windows\CurrentVersion\Installer\Managed\...
HKCU\Software\Microsoft\Installer\Products
HKLM\Software\Microsoft\Windows\CurrentVersion\Group Policy\AppMgmt
HKLM\Software\Microsoft\Windows\CurrentVersion\Installer\UserData\...
И больше!
С одной стороны, это является можно точно увидеть, какая последовательность запросов к реестру требуется для точного восстановления того, что вы видите в «Установка и удаление программ», то есть «представление» на основе текущего пользователя, вошедшего в систему, и т. д. С другой стороны, я думаю, вы будете быстро пришел к осознанию того, что это много работы, и что, возможно, восстановление точного представления об установке и удалении программ, возможно, не было для вас таким важным. :)