如何删除注册表中的值?

时间:2016-04-20 08:43:18

标签: c#

嘿伙计,所以我试图在用户按下 Windows + R 键时删除运行历史记录,因此没有历史记录我为此设置了方法,您将看到参数HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

但是我担心我会删除错误的项目,这是我的代码:

 //this method will clear the run history from the registry
    private void ClearRunHistory(string RegRunHistoryDirectory)
    {
        using (RegistryKey key = Registry.CurrentUser.OpenSubKey(RegRunHistoryDirectory, true))
        {
            if (key == null)
            {
                //if key doesnt exist then do nothing
            }

            else
            {
                key.DeleteValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU");
            }
        }

    }

3 个答案:

答案 0 :(得分:1)

在删除值中,您只需要输入值,而不是整个路径。例如,如果要删除testsettings / id中的id,则在key.DeleteValue中只需要输入" id"。 这里适用相同的逻辑。你想删除什么? RegRunHistoryDirectory下的值或所有值?

答案 1 :(得分:0)

如果要删除运行历史记录,则要删除注册表项@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU"的每个值 减去(默认)一个。

(幸运的是,当你枚举它时,框架会忽略默认框架)

在您的代码中,您将整个密钥路径传递给key.DeleteValue(),这是错误的。

正确的方法是首先枚举密钥的所有值然后删除,这是一个例子:

using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU", true))
{
     string[] values = key.GetValueNames();

     foreach (var item in values)
     {
         key.DeleteValue(item);
     }
}

参考: https://support.microsoft.com/en-us/kb/142298

答案 2 :(得分:0)

嘿伙计们只是想说我修好了这个:)

使用key.DeleteValue()