2016-04-20 174 views
0

嗨所以我想删除的运行历史记录当用户按下的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

在什么意义上你担心你会删除错误的注册表项?你问:“这是存储运行历史记录的注册表项?”,还是你问“我的代码是否有可能删除不同的注册表项”? –

回答

1

如果你想删除的运行历史记录,要删除注册表项@"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

+0

谢谢你,我会试试这个。 – DialUp

+0

好的,如果您满意,在尝试时将该标记标记为已接受的答案。 (我试了我的电脑,并正在工作) – fruggiero

+0

做到了,但我有一个未经授权的例外。 – DialUp

1

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

+0

为什么不用RunMRU做例子? –

+0

因为我不确定他想删除什么。这就是为什么我问他是否想删除目录下的所有值或只是一个特定的值。 –

0

嗨只想说我固定这:) :)

随着key.DeleteValue()

+0

这与@fruggiero已经提供的答案有何不同?另外你已经在[comments](http://stackoverflow.com/a/36738928/5060335)中提到了这一点, – UditS