我正在尝试打开子键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视图。
答案 0 :(得分:0)
这是愚蠢的。我似乎反过来理解了这个观点。我已经声明它要去Registry32并认为它需要去那里寻找额外的子键,但它实际上需要转到Registry64视图。