Registry.GetValue返回null但注册表可见对应键的技术求助
解决C# Registry.GetValue读取64位注册表返回null的问题
检查程序目标平台:64位Windows系统中,32位程序访问
HKEY_LOCAL_MACHINE\SOFTWARE时会被自动重定向到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node。如果你在注册表编辑器里看到的键位于64位SOFTWARE路径下,但程序编译为x86(32位),就会读不到目标值。解决方式:- 右键项目→属性→生成,将目标平台改为x64;
- 或选择Any CPU,并取消勾选“首选32位”选项。
显式指定注册表视图:如果需要保持程序为32位,又要读取64位注册表分支,可通过
RegistryKey.OpenBaseKey方法指定64位视图,示例代码:using Microsoft.Win32; var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); using var targetKey = baseKey.OpenSubKey(@"SOFTWARE\CNC Software, Inc.\Mastercam 2023"); var installLanguage = targetKey?.GetValue("InstallLanguage", null);核对注册表路径实际位置:打开注册表编辑器,同时检查
HKEY_LOCAL_MACHINE\SOFTWARE和HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node下是否存在目标键。部分软件可能实际安装在32位分支下,容易造成路径误判。确认注册表键权限:即使以管理员身份运行,也要确保当前用户对目标注册表键拥有读取权限。右键目标键→权限,检查当前用户组(如Administrators)是否有读取权限,缺失则添加对应权限。
内容的提问来源于stack exchange,提问作者PouncingPiggy
相关产品推荐
相关产品推荐

