Eventually I used WMI for this:
function _getRootCode(root) {
var rootCode = null;
switch(root){
case 'HKCR':
case 'HKEY_CLASSES_ROOT':
rootCode = 0x80000000;
break;
case 'HKCU':
case 'HKEY_CURRENT_USER':
rootCode = 0x80000001;
break;
case 'HKLM':
case 'HKEY_LOCAL_MACHINE':
rootCode = 0x80000002;
break;
case 'HKU':
case 'HKEY_USERS':
rootCode = 0x80000003;
break;
case 'HKCC':
case 'HKEY_CURRENT_CONFIG':
rootCode = 0x80000005;
break;
}
return rootCode;
},
function keyExist(root, path) {
var WMIRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\default:StdRegProv");
var keys;
return WMIRegistry.EnumKey(_getRootCode(root), path, keys) == 0;
}
Works fine on Win7 and WinXP.