首页 > 解决方案 > 删除注册表子项不会删除,没有抛出错误

问题描述

我正在尝试通过 C# 删除一些注册表项,但代码不会影响注册表,我以管理员身份打开 Visual Studio,我正在尝试删除位于此路径中的键:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects

在此处输入图像描述

这是我的代码:

string RegBHO = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects";
string guid = "{b908e54f-8c58-4d5d-8762-60d7d675cd39}";
RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(RegBHO, true);
registryKey.DeleteSubKey(guid, false);

但是{b908e54f-8c58-4d5d-8762-60d7d675cd39}我运行代码后名为enen的文件夹仍然存在(我点击F5刷新注册表列表)

标签: c#registry

解决方案


您很可能正试图从64 位应用程序中删除32 位密钥,反之亦然。

您将需要在您的应用程序中使用适当的位数,或使用以下内容来读取/写入/删除密钥

RegistryView 枚举

指定在 64 位操作系统上以哪个注册表视图为目标。

RegistryKey.OpenBaseKey

打开一个新的 RegistryKey,它表示具有指定视图的本地计算机上的请求键。

RegistryView 枚举:在 64 位版本的 Windows 上,部分注册表分别存储用于 32 位和 64 位应用程序。32 位应用程序有 32 位视图,64 位应用程序有 64 位视图。

您可以在使用OpenBaseKeyOpenRemoteBaseKey(RegistryHive, String, RegistryView)方法时指定注册表视图,以及 RegistryKey 对象的 FromHandle 属性。

例子

using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
{

}

推荐阅读