Лучший отвечающий
Как получить список установленных программ

Вопрос
-
Как можно получить список установленных программ, которое отображаются только в "Программы и компоненты".
Варианты - Windows PowerShell
Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize
и cmd wmic product get name,version
Не подходят, так как выдают список из 100+ программ, которые не отображаются в "Программы и компоненты". А нужен только тот список, который там отображается.
Список нужно получить с помощью команды, т.к нужен для использования внутри инсталлятора Inno Setup
- Изменено Velart 24 января 2020 г. 6:04
24 января 2020 г. 6:03
Ответы
-
Нашел корень проблемы. В моём случае, я искал с++ Redistributable в реестре, которые отображаются в "Программы и компоненты". Нужно ингалятором(или тем что вы используете) анализировать строку "DisplayName", например значение будет "Microsoft Visual C++ 2005 Redistributable - x64 8.0.51011 False", False - означает что Redistributable не будет отображаться в списке "Программы и компоненты", если флаг отсутствует, соответственно - будет отображаться.
- Помечено в качестве ответа Velart 28 января 2020 г. 6:39
28 января 2020 г. 6:39
Все ответы
-
Попробуйте Get-WmiObject win32_product OR Get-CimInstance win32_product24 января 2020 г. 6:37
-
Тот же эффект, выдает 100+ программ. Как я понимаю все эти команды берут информацию из
...CurrentVersion\Uninstall\*
И соответственно выводится список деинсталяторов.
"Программы и компоненты", а так же Ccleaner берут эту информацию в каком-то другом месте, вот такую команду я и не могу найти
24 января 2020 г. 6:41 -
Добрый день, можно попробовать отфильтровать значения, убрав обновления и системные компоненты:
Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName,DisplayVersion, Publisher, InstallDate,ParentKeyName,SystemComponent,'(default)'|? {!$_.SystemComponent}|?{!$_.ParentKeyName} |? {$_.'(default)'-eq $null} | Format-Table -AutoSize
24 января 2020 г. 8:20 -
Выдает значительно меньше вариантов, их меньше чем в "Программы и компоненты", есть ли вообще способ получить идентичный список с "Программы и компоненты", с помощью команд?24 января 2020 г. 10:32
-
Вот более полный скрипт (взято отсюда), с проверкой по всем веткам реестра
if (!([Diagnostics.Process]::GetCurrentProcess().Path -match '\\syswow64\\')) { $unistallPath = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" $unistallWow6432Path = "\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" @( if (Test-Path "HKLM:$unistallWow6432Path" ) { Get-ChildItem "HKLM:$unistallWow6432Path"} if (Test-Path "HKLM:$unistallPath" ) { Get-ChildItem "HKLM:$unistallPath" } if (Test-Path "HKCU:$unistallWow6432Path") { Get-ChildItem "HKCU:$unistallWow6432Path"} if (Test-Path "HKCU:$unistallPath" ) { Get-ChildItem "HKCU:$unistallPath" } ) | ForEach-Object { Get-ItemProperty $_.PSPath } | Where-Object { $_.DisplayName -and !$_.SystemComponent -and !$_.ReleaseType -and !$_.ParentKeyName -and ($_.UninstallString -or $_.NoRemove) } | Sort-Object DisplayName | Select-Object DisplayName } else { "You are running 32-bit Powershell on 64-bit system. Please run 64-bit Powershell instead." | Write-Host -ForegroundColor Red }
24 января 2020 г. 11:09 -
Нашел корень проблемы. В моём случае, я искал с++ Redistributable в реестре, которые отображаются в "Программы и компоненты". Нужно ингалятором(или тем что вы используете) анализировать строку "DisplayName", например значение будет "Microsoft Visual C++ 2005 Redistributable - x64 8.0.51011 False", False - означает что Redistributable не будет отображаться в списке "Программы и компоненты", если флаг отсутствует, соответственно - будет отображаться.
- Помечено в качестве ответа Velart 28 января 2020 г. 6:39
28 января 2020 г. 6:39