Я хочу получить список моих установленных программ.
Я знаю, как это работает с powershell: Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table –AutoSize .
Но я хочу это с php. Теперь у меня есть это:
<?php
$Wshshell= new COM('WScript.Shell');
$data = $Wshshell->regRead('HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall');
?>
Я получаю эту ошибку: Источник: WshShell.RegRead
Описание: Невозможно открыть ключ реестра «HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall» для чтения
Вот проект, который позволяет PHP получить и динамически взаимодействовать с реальным Powershell. Получи это здесь: https://github.com/merlinthemagic/MTS
После загрузки вы просто используете следующий код:
$shellObj = \MTS\Factories::getDevices()->getLocalHost()->getShell('powershell');
$strCmd = 'Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* | Select-Object DisplayName, DisplayVersion, Publisher, InstallDate';
$return1 = $shellObj->exeCmd($strCmd);
echo $return1;// list of all programs
Вы можете использовать любую команду, которая вам нравится, в отношении $ shellObj, среда поддерживается в течение всего срока действия сценария PHP.
в PowerShell вы можете прочитать ключ реестра, как это
Get-ItemProperty "hklm:\software\microsoft\windows\currentversion\uninstall\windows media player"
Это может решить вашу проблему:
$Wshshell = new COM('WScript.Shell');
$data = $Wshshell->regRead('HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\');
echo "result: " . $data;
Вы делаете правильно, но вы ищете ключи / значения в текущей выбранной папке, просто добавьте косую черту, чтобы получить подпапки.
Если вы проверите реестр, в папке «Uninstall» нет ключей, но должны быть подпапки.