C# 如何在c中读取Windows Server 2008#

C# 如何在c中读取Windows Server 2008#,c#,asp.net,registry,C#,Asp.net,Registry,我正在尝试用以下代码读取注册表值 Label1.Text = Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Myweb\\ConnectionManager", "ID", null).ToString(); 当我尝试使用windows xp时,它工作正常,但我从未在windows server 2008中工作过。 请提供任何帮助您可能遇到了问题 您可以使用Microsoft.Win32中的more获取配置单元的64位或32位部分

我正在尝试用以下代码读取注册表值

    Label1.Text = Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Myweb\\ConnectionManager", "ID", null).ToString();
当我尝试使用windows xp时,它工作正常,但我从未在windows server 2008中工作过。
请提供任何帮助

您可能遇到了问题

您可以使用Microsoft.Win32中的more获取配置单元的64位或32位部分

 var root = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine
                                   ,RegistryView.Registry32); // or Registry64
 var flk = root.OpenSubKey("SOFTWARE");
 var slk = flk.OpenSubKey("Myweb");
 var tlk = slk.OpenSubKey("ConnectionManager");
 var val = tlk.GetValue("ID");

 Label1.Text = val.ToString();
或更通用的方法,以获取注册表值:

object GetValue64Or32(string path, string ValueKey)
{
     var parts = path.Split('\\');
     RegistryHive hive = RegistryHive.LocalMachine;
     switch(parts[0])
     {
        case "HKEY_LOCAL_MACHINE":
            hive = RegistryHive.LocalMachine;
        break;
        default:
           throw new NotImplementedException();
     }
     foreach(var view in Enum.GetValues(typeof(RegistryView)))
     {
        var key = RegistryKey.OpenBaseKey(hive, (RegistryView) view);
        for(var partIndex=1; partIndex<parts.Length;partIndex++)
        {
           key = key.OpenSubKey(parts[partIndex]);
           if (key == null) break;
        }
        if (key!=null) return key.GetValue(ValueKey);
     }
     return null;
}
如果使用此注册表文件,则此代码适用于32位配置单元:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyWeb\]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyWeb\ConnectionManager\]
"ID"="id 1"
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\MyWeb\]

[HKEY_LOCAL_MACHINE\SOFTWARE\MyWeb\ConnectionManager\]
"ID"="id 1"
这适用于64位配置单元:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyWeb\]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyWeb\ConnectionManager\]
"ID"="id 1"
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\MyWeb\]

[HKEY_LOCAL_MACHINE\SOFTWARE\MyWeb\ConnectionManager\]
"ID"="id 1"
您可以在命令提示符下使用
REG
来验证您的注册表路径是否存在:

reg query HKLM\Software\MyWeb\ConnectionManager /s

如何在服务器上创建密钥?(不会自动出现)。@Richard我已经创建了密钥。@rene不,我没有从IIS尝试过。我相信这与64位和32位操作系统有关regedit@rene它在windows xp中工作得非常好,但在windows server 2008中则不行。谢谢您的回答。我试过你的答案,但它给我的对象引用没有设置为实例。在这一行上,var val=tlk.GetValue(“ID”);我尝试了Registery32和64,非常好。谢谢你的工作,这两个都是完美的答案。RegistryView.Registry64它起作用了。