如何在 C# 中删除注册表值
Posted
技术标签:
【中文标题】如何在 C# 中删除注册表值【英文标题】:How to delete a registry value in C# 【发布时间】:2010-10-06 13:54:38 【问题描述】:我可以使用 Microsoft.Win32.Registry 类获取/设置注册表值。例如,
Microsoft.Win32.Registry.SetValue(
@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run",
"MyApp",
Application.ExecutablePath);
但我无法删除任何值。如何删除注册表值?
【问题讨论】:
【参考方案1】: string explorerKeyPath = @"Software\TestKey";
using (RegistryKey explorerKey = Registry.CurrentUser.OpenSubKey(explorerKeyPath, writable: true))
if (explorerKey != null)
explorerKey.DeleteSubKeyTree("TestSubKey");
【讨论】:
请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。【参考方案2】:RegistryKey registrykeyHKLM = Registry.LocalMachine;
string keyPath = @"Software\Microsoft\Windows\CurrentVersion\Run\MyApp";
registrykeyHKLM.DeleteValue(keyPath);
registrykeyHKLM.Close();
【讨论】:
【参考方案3】:要删除树中的所有子键/值(〜递归),这是我使用的扩展方法:
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);
【讨论】:
看起来像一些在 .NET 上工作的人也认为这也是个好主意 :) 为 .NET 4.0 添加了 msdn.microsoft.com/en-us/library/dd411622.aspx 请注意,如果DeleteSubKeyTree()
中的第二个参数未指定,它将假定为真并抛出异常,除非在调用OpenSubKey()
后关闭键。【参考方案4】:
删除问题中设置的值:
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.CurrentUser
、RegistryKey.OpenSubKey
和RegistryKey.DeleteValue
的文档了解更多信息。
【讨论】:
如何删除整个文件夹?假设我想删除@"Software\TeamViewer";
使用 Registry.CurrentUser.DeleteSubKeyTree(rootKey)
谢谢!我错过了“真”值,表明我需要对密钥进行写访问才能删除它。
注意:如果您不希望它在值不存在时引发错误,请使用key.DeleteValue("MyApp", false)
。【参考方案5】:
RegistryKey.DeleteValue
【讨论】:
如何获取RegistryKey对象 DeleteValue 不是静态方法以上是关于如何在 C# 中删除注册表值的主要内容,如果未能解决你的问题,请参考以下文章