首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中的注册表管理

C#中的注册表管理
EN

Stack Overflow用户
提问于 2011-09-16 14:49:56
回答 2查看 1.5K关注 0票数 1

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

代码语言:javascript
复制
HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{D9AC2148-5E15-48AD-A693-E48714592381}

我有这么多:

代码语言:javascript
复制
string key = "D9AC2148-5E15-48AD-A693-E48714592381";
StringBuilder sb = new StringBuilder(key);
RegistryKey k = Registry.ClassesRoot.OpenSubKey("Wow6432Node\\CLSID", true);

我该如何继续?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-16 14:52:25

您可以使用DeleteSubKey方法:

代码语言:javascript
复制
string key = "{D9AC2148-5E15-48AD-A693-E48714592381}";
Registry.ClassesRoot.DeleteSubKey(@"Wow6432Node\CLSID\" + key);
票数 1
EN

Stack Overflow用户

发布于 2011-09-16 15:33:42

您需要考虑registry redirection;这才是真正的问题所在。在32位机器上,您需要的密钥的路径中没有WoW6432Node。

您正在尝试删除

代码语言:javascript
复制
HKEY_CLASSES_ROOT\CLSID\{D9AC2148-5E15-48AD-A693-E48714592381}

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

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

因此通过调用以下方法删除密钥

代码语言:javascript
复制
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.
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7441124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档