无法读取注册表项

本文关键字:注册表 读取 | 更新日期: 2023-09-27 18:37:25

我在尝试读取 Windows Server 2008 上的注册表项时遇到问题。 令人费解的是,代码确实可以在另一台服务器上工作,该服务器也是 2008 年,但是是 R2。 我已经检查并且注册表项已到位,并以管理员身份运行了该程序。 下面是一个代码示例。Registry.LocalMachine.OpenSubKey 返回的注册表密钥为空。这是一个 64 位应用程序

string strPath = "";
try
{
    //The registry key:
    //SOFTWARE'Microsoft'Windows'CurrentVersion'App Paths'SnmpClient.exe
    using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(strKey))
    {
            try
            {
                //InstallDirectory
                if (!(rk.GetValue(strValue) == null))
                {
                    strPath += rk.GetValue(strValue).ToString();
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
return strPath;

无法读取注册表项

你还没有说你是将应用程序编译为 32 位还是 64 位。

如果要将应用程序编译为 32 位应用程序,它将被重定向到

HKEY_LOCAL_MACHINE''软件'' Wow6432Node ''Microsoft''Windows''CurrentVersion''App Paths...

检查是否也存在正确的密钥,或者以 64 位编译。

下面介绍了如何打开 64 位配置单元。

var localMachine = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);

Graham Wager和Tom Brothers都对建议的方法是正确的。我在使用 VS 2013 和 MSTEST 运行单元测试时遇到的问题中的 2 美分:

执行通过单元测试从注册表读取的方法时,存在的注册表项在 Registry.LocalMachine.OpenSubkey(string, bool) 方法上始终返回为 null。问题是测试设置使默认处理器架构为 X86,因此在运行测试时,正在读取 Wow6432Node

总结:

VS 2013 MSTEST 在 Windows 7 64 位上运行

若要确保测试以 64 位运行,请转到"测试"->"测试设置"->"默认处理器体系结构",然后选择"X64

"

注意:Wow6432Node 适用于在 64 位系统上运行的 32 位应用程序