Как получить список установленных приложений на Windows 10 из Java

Я пытаюсь получить список всех приложений, установленных в Windows 10 из моей программы Java. Я пробовал следующее:

 Runtime.getRuntime().exec("Get-WmiObject -class Win32_Product | Select-Object -Property Name");

и я получаю:

Cannot run program "Get-WmiObject": CreateProcess error=2

Я тоже попробовал:

Process p = Runtime.getRuntime().exec("Get-ItemProperty HKLM:\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize");

С похожим результатом.

Наконец, я попытался использовать библиотеку "win32", но она возвращает только название некоторых установленных программ.

Мне нужен тот же результат, который я получаю при выполнении в powershell следующей команды:

Get-ItemProperty HKLM: \ Software \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \ * | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize

Я искал другие вопросы в stackru, но ни один из них не дал мне решения. Мне нужно искать в каждом дисковом блоке (и не только в C:). Кто-то может подсказать мне возможное решение?

Благодарю.

1 ответ

Решение

Вы не можете запускать команды PowerShell напрямую, вы должны запускать их через процесс PowerShell:

powershell -command "PowerShell commands with parameters"

Так что измените ваш exec вызов, как это:

Process p = Runtime.getRuntime().exec("powershell -command \"Get-ItemProperty HKLM:\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize\"");
Другие вопросы по тегам