无法读取注册表项
本文关键字:注册表 读取 | 更新日期: 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 位应用程序