Существуют различные методы поиска установленных приложений в системе, но, насколько мне известно, ни один из них не возвращает точно такой же список, как элемент панели управления Установка и удаление программ. Вот некоторые из способов, которые я пробовал:
- WMI через Win32_Product и Win32Reg_AddRemovePrograms
- Реестр, ветви x32 и x64
Например, у меня есть 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
но безуспешно.
решение1
Для меня это прискорбный случайЗакон Конвея. Windows — очень сложная ОС с десятилетиями истории и огромным количеством подвижных частей. Это означает, что то, что кажется простым, например, вопрос «какого черта все установлено на моем компьютере?», к сожалению, становится очень сложным. То, что делает «установленное программное обеспечение» сложным, заключается в том, что оно поступает из нескольких разных источников. Есть 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\...
И более!
С одной стороны этоявляетсяможно увидеть, какая именно последовательность запросов к реестру требуется для точного восстановления того, что вы видите в «Установке и удалении программ», что является «представлением», основанным на текущем вошедшем в систему пользователе и т. д. С другой стороны, я думаю, вы быстро придете к пониманию того, что этомногоработы и что, возможно, воссоздание точного вида «Установки и удаления программ» изначально не было для вас таким уж важным. :)