如何用c#阅读Windows Server 2008

本文关键字:Server 2008 Windows 阅读 何用 | 更新日期: 2023-09-27 17:49:01

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

    Label1.Text = Registry.GetValue("HKEY_LOCAL_MACHINE''SOFTWARE''Myweb''ConnectionManager", "ID", null).ToString();

当我在Windows xp中尝试时,它工作得很好,但我从未在Windows server 2008中工作。

如何用c#阅读Windows Server 2008

您可能遇到了WOW重定向器的问题。

您可以使用Microsoft中更专门化的类。Win32用于获取hive的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;
}

用法:

var value = GetValue64Or32(
               "HKEY_LOCAL_MACHINE''SOFTWARE''Myweb''ConnectionManager"
             , "ID");
Label1.Text = value!=null?value.ToString():"no value found";

如果我使用这个注册表文件,下面的代码适用于32位的hive:

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

这适用于64位蜂箱:

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