web-dev-qa-db-ja.com

C#でレジストリ値を削除する方法

Microsoft.Win32.Registryクラスを使用してレジストリ値を取得/設定できます。例えば、

Microsoft.Win32.Registry.SetValue(
    @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",
    "MyApp", 
    Application.ExecutablePath);

しかし、値を削除することはできません。レジストリ値を削除するにはどうすればよいですか?

38
ebattulga

質問に設定された値を削除するには:

string keyName = @"Software\Microsoft\Windows\CurrentVersion\Run";
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyName, true))
{
    if (key == null)
    {
        // Key doesn't exist. Do whatever you want to handle
        // this case
    }
    else
    {
        key.DeleteValue("MyApp");
    }
}

Registry.CurrentUserRegistryKey.OpenSubKey および RegistryKey.DeleteValue 詳細情報。

88
Jon Skeet

ツリー内のすべてのサブキー/値を(〜再帰的に)削除するために、私が使用する拡張メソッドを次に示します。

public static void DeleteSubKeyTree(this RegistryKey key, string subkey, 
    bool throwOnMissingSubKey)
{
    if (!throwOnMissingSubKey && key.OpenSubKey(subkey) == null) { return; }
    key.DeleteSubKeyTree(subkey);
}

使用法:

string keyName = @"Software\Microsoft\Windows\CurrentVersion\Run";
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(keyName, true))
{
   key.DeleteSubKeyTree("MyApp",false);   
}
15
Even Mien
RegistryKey registrykeyHKLM = Registry.LocalMachine;
string keyPath = @"Software\Microsoft\Windows\CurrentVersion\Run\MyApp";

registrykeyHKLM.DeleteValue(keyPath);
registrykeyHKLM.Close();
11
Binoj Antony
1
Sören Kuklau