1

我在尝试读取 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;
4

3 回答 3

4

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node \Microsoft\Windows\CurrentVersion\App 路径...

要么检查正确的密钥是否也存在,要么编译为 64 位。

于 2012-06-15T16:50:57.623 回答
2

以下是打开 64 位配置单元的方法。

var localMachine = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
于 2012-06-15T17:07:46.920 回答
0

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

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

概括:

在 Windows 7 64 位上运行 MSTEST 的 VS 2013

要确保测试以 64 位运行,请转到 TEST -> TEST Settings -> Default processor architecture 并选择 X64

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

于 2015-05-12T06:18:58.007 回答