2016-09-27 118 views
0

我想要獲取已安裝程序的列表。獲取已安裝程序的註冊表項php

我知道它是如何工作使用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 \微軟\的Windows \ CurrentVersion \卸載」閱讀

+0

可能不是基於錯誤的問題,但嘗試使用雙反斜槓。例如''HKEY_LOCAL_MACHINE \\ Software \\ ...' – pmahomme

+0

我現在有這個:$ Wshshell = new COM('WScript.Shell'); $ data = $ Wshshell-> regRead('HKEY_LOCAL_MACHINE \\ Software \ \ Wow6432Node \\ Microsoft \\ Windows \\ CurrentVersion \\ Uninstall \\'); echo($ data);它可以工作,但不會打印任何東西 – jurh

+0

所以錯誤消失了,但是您在'卸載'?你如何顯示它們?我沒有看到任何循環或回顯任何數據。 – pmahomme

回答

0

註冊表項下面是一個項目,允許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腳本的生活。

0

這可以解決你的問題:

$Wshshell = new COM('WScript.Shell'); 
$data = $Wshshell->regRead('HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\'); 

echo "result: " . $data; 

你正在做correc t但在當前所選文件夾中查找鍵/值時,只需添加尾部斜線即可獲取子文件夾。

如果您檢查註冊表,「卸載」文件夾下沒有鍵,但必須有子文件夾。

+0

我希望獲得顯示所有子文件夾的顯示名稱卸載文件夾 – jurh

0

在PowerShell中,你可以讀到這樣的部份

Get-ItemProperty "hklm:\software\microsoft\windows\currentversion\uninstall\windows media player" 
相關問題