RegistryKey  Topreg = Registry.CurrentUser;
RegistryKey  Iplist = Topreg.OpenSubKey(@"Software\HSTools\IPMsgEng\BroadCast", true);
string[] str1 = Iplist.GetValueNames(); 
当我在form1这样写的时候是没有问题的
 private RegistryKey Iplist;
       private RegistryKey Topreg;
       private string[] value;
       public Todo()
        {
            Topreg = Registry.CurrentUser;
            //打开HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\BroadCast
            Iplist = Topreg.OpenSubKey(@"Software\HSTools\IPMsgEng\BroadCast", true);
            value = Iplist.GetSubKeyNames();
        }
这样写value得不到Iplist.GetSubKeyNames()返回的数组...
请问各位高手做成这错误的原因是,该怎样解决

解决方案 »

  1.   

    读取不到的可能原因如下:
    1、用户没有读取该项所需的权限。
    2、要操作的 RegistryKey 已关闭(无法访问关闭的项)。 
    3、用户没有必需的注册表权限。
    4、发生系统错误,例如,当前项已被删除。
      

  2.   

    1.如果用户没有权限那么为什么我在form1写可以读取到呢
    2.我在todo类
     ~Todo()
            {
                Iplist.Close();
                Topreg.Close();
            }
    难道是这里有问题?
      

  3.   

    断点在 value = Iplist.GetSubKeyNames();
    得到value {string[0]} string[]
    继续求解
      

  4.   

    RegistryKey  Topreg = Registry.CurrentUser;
    RegistryKey  Iplist = Topreg.OpenSubKey(@"Software\HSTools\IPMsgEng\BroadCast", true);
    string[] str1 = Iplist.GetValueNames(); private RegistryKey Iplist;
           private RegistryKey Topreg;
           private string[] value;
           public Todo()
            {
                Topreg = Registry.CurrentUser;
                //打开HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\BroadCast
                Iplist = Topreg.OpenSubKey(@"Software\HSTools\IPMsgEng\BroadCast", true);
                value = Iplist.GetSubKeyNames();
            }
    你取得的东西不一样
      

  5.   

    都是一样的,上面那个只是乱打的,只是为了说明我要把Iplist.GetValueNames()的返回放到一个数组里面
    下面那一段是一个类,实例化时把值传到value
    class Todo
    {
          private RegistryKey Iplist; 
          private RegistryKey Topreg; 
          private string[] value; 
          public Todo() 
            { 
                Topreg = Registry.CurrentUser; 
                //打开HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\BroadCast 
                Iplist = Topreg.OpenSubKey(@"Software\HSTools\IPMsgEng\BroadCast", true); 
                value = Iplist.GetSubKeyNames(); 
            } 
    }
      

  6.   

    Iplist.GetValueNames();   //取得所有键的键值集合  Iplist.GetSubKeyNames();  //取得所有子项名称的集合.所以,如果你Software\HSTools\IPMsgEng\BroadCast下没有子项了,当然返回空数组啊.