ID: 33912 Updated by: [EMAIL PROTECTED] Reported By: awsewell at catawba dot edu -Status: Assigned +Status: Feedback Bug Type: COM related Operating System: Windows XP PHP Version: 5CVS-2005-07-29 Assigned To: wez New Comment:
Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows: http://snaps.php.net/win32/php5.2-win32-latest.zip Does it still crash? use following script for correct output. See inline comments for changes: <?php define('HKEY_LOCAL_MACHINE',0x80000002); /* passing VT_ARRAY arg - see bug #39596 */ $keys = new VARIANT(array()); $hostname = "."; $keyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; $wshShell = new COM("winmgmts:{impersonationLevel=impersonate}//{$hostname}/root/default:StdRegProv"); $wshShell->EnumKey(HKEY_LOCAL_MACHINE, $keyPath, &$keys); /* COM in PHP 5 does not use the value property like in PHP 4 so use $keys directly */ foreach($keys as $key){ print "$key\n"; } ?> Previous Comments: ------------------------------------------------------------------------ [2005-08-02 15:29:06] terrafrost at gmail dot com Doesn't seem to work on the latest beta of PHP5, but it works on PHP4... <?php define('HKEY_LOCAL_MACHINE',0x80000002); $keys = new VARIANT('', VT_ARRAY); $hostname = "."; $keyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; $wshShell = new COM("winmgmts:{impersonationLevel=impersonate}//{$hostname}/root/default:StdRegProv"); $wshShell->EnumKey(HKEY_LOCAL_MACHINE, $keyPath, &$keys); $keys = $keys->value; foreach($keys as $key){ print "$key\n"; } ?> ------------------------------------------------------------------------ [2005-08-02 00:49:14] terrafrost at gmail dot com EnumKey's first variable isn't supposed to be a string - it's supposed to be an int. The number representing HKEY_LOCAL_MACHINE is 0x80000002. Check out the following link for more information: http://msdn.microsoft.com/library/en-us/wmisdk/wmi/enumkey_method_in_class_stdregprov.asp That said, even when "HKEY_LOCAL_MACHINE" is replaced with 0x80000002 in awsewell's code, the code still doesn't work as it should. The problem would seem to be due to arrays not being passed by reference. I say that because in vBScript, they do seem to be (just check out the examples in the link I provided). ------------------------------------------------------------------------ [2005-07-28 23:41:02] awsewell at catawba dot edu I tried the latest version via the link provided and get the same results. ------------------------------------------------------------------------ [2005-07-28 23:34:47] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5-latest.tar.gz For Windows: http://snaps.php.net/win32/php5-win32-latest.zip ------------------------------------------------------------------------ [2005-07-28 23:30:55] awsewell at catawba dot edu Description: ------------ When trying to use php 5.04 to access the registry with the code below PHP crashes. Reproduce code: --------------- <?php $hostname = "."; $keyPath = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; $wshShell = new COM("winmgmts:{impersonationLevel=impersonate}//{$hostname}/root/default:StdRegProv"); $wshShell->EnumKey("HKEY_LOCAL_MACHINE", $keyPath, $keys); foreach($keys as $key){ print $key; } unset($wshShell); ?> Expected result: ---------------- I execpt to see the list of subkeys from the registry. Actual result: -------------- PHP crashes with only "CLI has encountered a problem and needs to close. We are sorry for the inconvenience." ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=33912&edit=1