首页 > 后端开发 > C++ > 为什么 OpenSubKey() 对于 Regedit 中可见的注册表项返回 Null?

为什么 OpenSubKey() 对于 Regedit 中可见的注册表项返回 Null?

Mary-Kate Olsen
发布: 2025-01-05 18:39:40
原创
537 人浏览过

Why Does OpenSubKey() Return Null for a Registry Key Visible in Regedit?

OpenSubKey() 对 Regedit.exe 中可见的注册表项返回 Null

尝试检索注册表项 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall 中的子项显示名称时,用户可能会遇到以下问题: OpenSubKey() 方法对于注册表编辑器中可见的特定子项返回 null (regedit.exe)。

根本原因在于 64 位操作系统上 32 位应用程序使用的默认注册表视图。默认情况下,这些应用程序访问 HKLMSoftwareWow6432Node 节点,该节点包含 32 位注册表项。要读取64位版本的密钥,需要在打开基本密钥时指定RegistryView。

要解决此问题,请使用以下代码:

using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
using (var key = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"))
{
   // key now points to the 64-bit key
}
登录后复制

这个代码确保使用 64 位视图打开注册表项,从而允许访问所需的子项及其显示名称。

或者,对于.NET 3.5 用户,需要借助 P/Invoke 来访问 64 位密钥,如原始答案中提供的资源中所述。

以上是为什么 OpenSubKey() 对于 Regedit 中可见的注册表项返回 Null?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板