使用c#删除注册表项
本文关键字:注册表 删除 使用 | 更新日期: 2023-09-27 18:10:01
我正在尝试删除注册表项:
RegistryKey oRegistryKey = Registry.CurrentUser.OpenSubKey(
"Software''Microsoft''Windows''CurrentVersion''Explorer''FileExts", true);
oRegistryKey.DeleteSubKeyTree(".");
但是这给了我一个例外:
不能删除子键树,因为子键不存在
如果我把DeleteSubKeyTree
改为DeleteSubKey
,我收到一个不同的异常:
注册表项有子键,此方法不支持递归删除
这个答案中概述的方法是不必要的复杂,因为DeleteSubKeyTree是递归的。来自MSDN上的文档:
递归删除子键和所有子键。
所以,如果你的目标是删除用户的FileExts
键,这样做:
string explorerKeyPath = @"Software'Microsoft'Windows'CurrentVersion'Explorer";
using (RegistryKey explorerKey =
Registry.CurrentUser.OpenSubKey(explorerKeyPath, writable: true))
{
if (explorerKey != null)
{
explorerKey.DeleteSubKeyTree("FileExts");
}
}
但是,您确定真的要删除用户的 最后,注意 在这个版本中,如果FileExts
密钥吗?我相信大多数人会认为这样做会造成不合理的破坏和鲁莽。更常见的情况是,从FileExts
密钥中删除单个文件扩展名密钥(例如,.hdr
)。DeleteSubKeyTree
是重载的。下面是这个方法的第二个版本的签名:public void DeleteSubKeyTree(
string subkey,
bool throwOnMissingSubKey
)
subkey
不存在并且throwOnMissingSubKey
为假,则DeleteSubKeyTree
将简单地返回,而不需要对注册表进行任何更改。
试试这个:
string str = @"Software'Microsoft'Windows'CurrentVersion'Explorer'FileExts";
string[] strSplit = strLocal.Split('''');
using (RegistryKey oRegistryKey = Registry.CurrentUser.OpenSubKey(@"Software'Microsoft'Windows'CurrentVersion'Explorer'FileExts", true))
{
RegistryKey hdr = oRegistryKey.OpenSubKey(strSplit[strSplit.Length-2], true);
foreach (String key in hdr.GetSubKeyNames())
hdr.DeleteSubKey(key);
hdr.Close();
oRegistryKey.DeleteSubKeyTree(strSplit[strSplit.Length - 2]);
}
也检查:注册表在。net: deleetesubkeytree说子键不存在,但是嘿,它存在!
请注意32或64注册表。注意:RegistryView.Registry64
是问题的关键。
这是我的实现,为我工作:
public static void DeleteRegistryFolder(RegistryHive registryHive, string fullPathKeyToDelete)
{
using (var baseKey = RegistryKey.OpenBaseKey(registryHive, RegistryView.Registry64))
{
baseKey.DeleteSubKeyTree(fullPathKeyToDelete);
}
}
用法:
var baseKeyString = $@"SOFTWARE'Microsoft'Windows'CurrentVersion'Uninstall'MyApp";
DeleteRegistryFolder(RegistryHive.LocalMachine, baseKeyString);
这将帮助你 ............
http://www.codeproject.com/Questions/166232/C-delete-a-registry-key-cannot-get-it-done如果'subkey'参数为空字符串,则DeleteSubKey
和DeleteSubKeyTree
方法都删除当前密钥,如key.DeleteSubKey("");
Key应该有写权限。
首先需要检查注册表项:
using (RegistryKey Key = Registry.CurrentUser.OpenSubKey(@"Software''Microsoft''Windows''CurrentVersion''Explorer''FileExts"))
if (Key != null)
{
key.DeleteValue("."); //delete if exist
}
else
{
MessageBox.Show("key not found");
}