2016-04-20 5 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" から(デフォルトの)値を差し引いたすべての値を削除する必要があります。あなたのコードで

(幸いなことに、フレームワークは、あなたがそれを列挙デフォルトの1を無視する)

、代わりに、あなたは間違っている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

あなたが試したときに受け入れられた答えとしてそれをマークしてもらえればOKです。 (私は私のPCで試して、働いています) – fruggiero

+0

それをしましたが、私は許可されていない例外があります。 – DialUp

1

:私は、これは私のコードで、私は間違った項目を削除します心配です。たとえば、testsettings/idのidを削除する場合は、key.DeleteValueに "id"だけを入れる必要があります。 同じロジックがここに適用されます。あなたは何を削除しますか? RegRunHistoryDirectoryの下の値またはすべての値?

+0

RunMRUでサンプルを作成してみませんか? –

+0

私は彼が何を削除しようとしているのか分かりません。これは、ディレクトリの下のすべての値または特定の値を削除するかどうかを尋ねた理由です。 –

0

やあみんなはちょうど私が固定することを言いたかったですこの:):

キーで.DeleteValue()

+0

@fruggieroがすでに提供している答えとどのように違うのですか?また、あなたはすでに[コメント](http://stackoverflow.com/a/36738928/5060335)でこれを言及しています。 – UditS

関連する問題