2016-04-20 2 views
0

Эй, ребята, так что я пытаюсь удалить историю Run, когда пользователь нажимает 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

в удалении значения вы должны поставить только значение, а не весь путь. Например, если вы хотите удалить id в testettings/id, в key.DeleteValue вам нужно поместить только «id». Здесь применяется та же логика. Что вы хотите удалить? Значение или все значения в RegRunHistoryDirectory?

+0

Почему бы не сделать пример с RunMRU? –

+0

Потому что я не уверен, что он пытается удалить. Вот почему я спросил, хочет ли он удалить все значения в каталоге или только определенное значение. –

0

Эй, ребята, просто хотел сказать, что я установил this :)

С ключом.DeleteValue()

+0

Как это отличается от ответа, уже предоставленного @fruggiero? Также вы уже упомянули это в [комментариях] (http://stackoverflow.com/a/36738928/5060335) – UditS

Смежные вопросы