【问题标题】:OpenSubKey() returns null only one path in Registry. C++OpenSubKey() 在 Registry 中只返回一个路径为 null。 C++
【发布时间】:2014-04-30 13:40:24
【问题描述】:

我正在尝试打开子密钥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 中的Secure subkeyname。

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

【问题讨论】:

  • 应用程序编译的 CPU 架构是什么?你的 Windows 有什么 CPU 架构?
  • 都是 64 位的,所以我将视图定义为 Registry32。

标签: c++-cli registrykey


【解决方案1】:

嗯,这很愚蠢。似乎我理解了相反的观点。我已经声明它去 Registry32 并认为它需要去那里以获得额外的子项,但它实际上需要去 Registry64 视图。

【讨论】:

    猜你喜欢
    • 2012-07-10
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多