我用同样的方法读取注册表HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\run信息
和HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\下面每个程序的DisplayName信息
就用OpenSubKey ,GetSubKeyNames,GetValueNames,GetValue 这4个方法
为什么第一个RUN信息可以读取
而每个程序的DisplayName读不出来呢?
运行时没有错误,但就是没有读到信息.
请那位明白,解释一下,谢谢!

解决方案 »

  1.   

    private void button1_Click(object sender, EventArgs e)
            {
                this.listView1.Items.Clear();
                RegistryKey hklm = Registry.LocalMachine;
                RegistryKey software = hklm.OpenSubKey("SOFTWARE");
                RegistryKey no1 = software.OpenSubKey("Microsoft");
                RegistryKey no2 = no1.OpenSubKey("Windows");
                RegistryKey site = no2.OpenSubKey("CurrentVersion");
                RegistryKey sitekey = site.OpenSubKey("Uninstall");
                 string[] sValName = sitekey.GetSubKeyNames();            for (int i = 0; i < sValName.Length; i++)
                {
                    ListViewItem v_item = new ListViewItem(sValName[i]);                string temp_string = (string)Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall" + sValName[i], "DisplayName", "Nothing)");
                   
                    v_item.SubItems.Add(temp_string);                this.listView1.Items.Add(v_item);
    就是这么写的,在listView1里就能显示一列:是Uninstall下面每个子键名称,DisplayName显示不了!我刚学C#,请指点一下,到底怎么回事啊?谢谢
      

  2.   

    private void button1_Click(object sender, EventArgs e)
    {
        this.listView1.Items.Clear();
        RegistryKey hklm = Registry.LocalMachine;
        RegistryKey software = hklm.OpenSubKey("SOFTWARE");
        RegistryKey no1 = software.OpenSubKey("Microsoft");
        RegistryKey no2 = no1.OpenSubKey("Windows");
        RegistryKey site = no2.OpenSubKey("CurrentVersion");
        RegistryKey sitekey = site.OpenSubKey("Uninstall");
        foreach (string sValName in sitekey.GetSubKeyNames())
        {
            ListViewItem v_item = new ListViewItem(sValName);
            v_item.SubItems.Add(sitekey.OpenSubKey(sValName).GetValue(
                 "DisplayName", "Nothing)").ToString());
            listView1.Items.Add(v_item);
        }
    }                                                                   
      

  3.   

    关键是sValName得到的是subkey的集合不是变量名的集合
      

  4.   

    你先获取sValName.Length的值,看到底是多少,单步调试下