OpenSubKey()在Registry中只返回一个路径。 C ++

时间:2014-04-30 13:40:25

标签: c++-cli registrykey

我正在尝试打开子键HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData

我将其定义为:

RegistryKey^ HkeylmPath32 = RegistryKey::OpenBaseKey(RegistryHive::LocalMachine, RegistryView::Registry32);
RegistryKey^ Test = HkeylmPath32->OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData");

但它返回null。我在程序中有各种其他注册表调用,它们都没问题。正是这一点给了我一些问题。我该如何解决这个问题?

我在PowerShell中运行了这个:

$uninstallkey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer"
$reg = [Microsoft.Win32.RegistryKey]::OpenBaseKey('LocalMachine', 'Registry32')
$regkey = $reg.OpenSubKey($uninstallkey)
$subkeys = $regkey.GetSubKeyNames()

write-host $reg
write-host $uninstallkey
write-host $regkey

foreach($key in $subkeys){
    write-host $key
}

结果如下:

HKEY_LOCAL_MACHINE
SOFTWARE\Microsoft\Windows\CurrentVersion\Installer
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer
Secure

即使卸载密钥显示它将转到32位注册表路径。它实际上是通过Wow6432Node到达Installer中的安全子关键字。

为什么呢?我声明它使用Registry32视图。

1 个答案:

答案 0 :(得分:0)

这是愚蠢的。我似乎反过来理解了这个观点。我已经声明它要去Registry32并认为它需要去那里寻找额外的子键,但它实际上需要转到Registry64视图。