c#中的注册表管理

本文关键字:管理 注册表 | 更新日期: 2023-09-27 18:08:59

我想从注册表中删除以下节点。我该怎么做呢?

HKEY_CLASSES_ROOT'Wow6432Node'CLSID'{D9AC2148-5E15-48AD-A693-E48714592381}

我有这么多:

string key = "D9AC2148-5E15-48AD-A693-E48714592381";
StringBuilder sb = new StringBuilder(key);
RegistryKey k = Registry.ClassesRoot.OpenSubKey("Wow6432Node''CLSID", true);

我该如何继续?

c#中的注册表管理

您需要考虑注册表重定向;这才是真正的问题。在32位机器上,您需要的密钥在路径中没有WoW6432Node。

您正在尝试删除

HKEY_CLASSES_ROOT'CLSID'{D9AC2148-5E15-48AD-A693-E48714592381}

从注册表的32位视图。微软很清楚,你不应该在你的应用程序中硬编码WoW6432Node:

重定向密钥映射到Wow6432Node下的物理位置。例如,HKEY_LOCAL_MACHINE'Software被重定向到HKEY_LOCAL_MACHINE'Software'Wow6432Node。但是,重定向键的物理位置应该被系统认为是保留的。应用程序不应该直接访问键的物理位置,因为这个位置可能会改变。

通过调用

删除键
DeleteSubKey(@"HKEY_CLASSES_ROOT'CLSID'{D9AC2148-5E15-48AD-A693-E48714592381}")

但是使用重定向器来确保您在注册表的32位视图上操作。

在。net中,你可以通过两种方式实现你所需要的。

  1. 目标x86,让重定向为您工作。
  2. 如果您的目标是x64或AnyCPU,您需要使用RegistryView.Registry32(在。net 4中新增)来打开注册表的32位视图。如果你没有。net 4,那么你必须P/Invoke。

您可以使用deleetesubkey方法:

string key = "{D9AC2148-5E15-48AD-A693-E48714592381}";
Registry.ClassesRoot.DeleteSubKey(@"Wow6432Node'CLSID'" + key);