如何使用DeleteSubkeyTree递归删除注册表项

时间:2018-10-05 11:13:32

标签: c#

代码:

try 
{
     RegistryKey SQMRegKey = Registry.LocalMachine.OpenSubKey("CurrentControlSet\\Control\\WMI\\Autologger", true);
     //SQMRegKey.DeleteSubKey("SQMLogger");
     SQMRegKey.DeleteSubKeyTree("SQMLogger");
     SQMRegKey.Close();
} 
catch (Exception ex)
{
     MessageBox.Show(this, ex.ToString());
}

总是抛出异常System.NullReferenceException:对象引用未设置为对象的实例

2 个答案:

答案 0 :(得分:0)

OpenSubKey可能会失败,在这种情况下,返回值为null。您使用引用SQMRegKey而不检查它是否实际指向有效对象。

try 
{
     var SQMRegKey = Registry.LocalMachine.OpenSubKey("CurrentControlSet\\Control\\WMI\\Autologger", true);
     if(SQMRegKey != null)
     {
        SQMRegKey.DeleteSubKeyTree("SQMLogger");
        SQMRegKey.Close();
     }
} 
catch (Exception ex)
{
     MessageBox.Show(this, ex.ToString());
}

答案 1 :(得分:0)

注册表路径不正确。请使用以下修改后的代码:

        try
        {
            RegistryKey SQMRegKey = Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\WMI\\Autologger", true);
            //SQMRegKey.DeleteSubKey("SQMLogger");

            SQMRegKey.DeleteSubKeyTree("SQMLogger");

            SQMRegKey.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }