处理系统注册表的 C# 类






3.74/5 (23投票s)
这个 C# 类可以检索、创建、删除注册表值和键,甚至更多...
引言
向您介绍一个类(当然是用 C# 编写的),它可以帮助您执行所有必要的系统注册表操作,例如检索和设置注册表键和值。
那么,我的类能做什么?我的 clsRegistry
类有 10 个有用的方法,它们为您提供了对 C# 内置注册表函数的易于理解的接口。C# 中的所有注册表函数都实现在 Microsoft.Win32
命名空间中,因此当您要处理系统注册表时,请不要忘记在项目中包含“using Microsoft.Win32;
”声明……或者直接使用 clsRegistry
类。
clsRegistry 类描述
类方法是
GetStringValue
检索指定的
String
值。返回一个System.String
对象。GetDWORDValue
检索指定的
DWORD
值。返回一个System.Int32
对象。*
GetBinaryValue
检索指定的
Binary
值。返回一个System.Byte[]
对象。SetStringValue
设置/创建指定的
String
值。SetDWORDValue
设置/创建指定的
DWORD
值。*
SetBinaryValue
设置/创建指定的
Binary
值。CreateSubKey
创建新的子项或打开现有的子项。
DeleteSubKeyTree
递归删除子项及其所有子项。
DeleteValue
从(当前)键中删除指定的值。
GetValueType
检索指定注册表值的类型。
* 通常,当您创建 DWORD
注册表值时,它应该是无符号 32 位整数值(或 System.UInt32
或简称为 uint
),范围为0 到 4,294,967,295。但是!!!Microsotf.Win32.RegistryKey.SetValue()
方法强制将其设置为有符号 32 位整数(或 System.Int32
或简称为 int
),范围为-2,147,483,648 到 2,147,483,647。如果您尝试分配一个大于2,147,483,647 的值,则会创建 String
值。所以,各位兄弟,请在此处极其小心,以免产生不希望的后果!!!
我还不确定这是个 bug 还是某种新约定。
如何将 clsRegistry 类包含到您的项目中
创建一个使用控制台应用程序模板的新应用程序,并将其命名为“RegClassTest
”。实际上,应用程序的类型在这里并不重要;控制台应用程序只是我的偏好。它可以是Windows 应用程序或其他任何类型——您选择。现在(为了方便起见),您可以将 clsRegistry.cs 文件复制到项目的文件夹中。然后转到“项目”菜单,单击“添加现有项…”或只需按 ALT+SHIFT+A 打开“添加项”对话框。找到 clsRegistry.cs 文件,选择它,然后单击“打开”。查看“解决方案资源管理器”窗口:我们的文件应该已添加到项目中。

clsRegistry:类用法
将 clsRegistry.cs 添加到项目后,双击它以编辑代码。现在,将以下行替换为...
namespace RegistryClass
...替换为这一行
namespace RegClassTest
在这里,“RegClassTest
”将替换为您项目的命名空间名称。
现在保存您的项目,然后转到您项目的类文件并打开代码窗口。为了开始使用我们的 clsRegistry
类,我们必须创建一个类的实例。它的做法如下:
//don't forget about Microsoft.Win32 namespace
//if you are going to use the C# Registry functions
using Microsoft.Win32;
static void Main(string[] args)
{
clsRegistry reg = new clsRegistry(); //create new instance of clsRegistry class
...
}
重要提示:函数不返回错误代码。为此,提供了 strRegError
变量。此变量始终包含上一次操作的消息,如果未发生错误,则为 null
。我建议您每次使用 clsRegistry
的函数时都检查错误。下面显示的示例说明了如何调用类函数以及如何检查错误
static void Main(string[] args)
{
clsRegistry reg = new clsRegistry(); //create new instance of clsRegistry class
/*========= WORKING WITH STRING VALUES =========*/
Console.WriteLine ("/*========= WORKING WITH STRING VALUES =========*/");
// Set string value
Console.WriteLine ("SET");
reg.SetStringValue (
Registry.LocalMachine,
"SOFTWARE\\RegClassTest",
"myStringValue",
"Mama, I've just set a string value :-)"
);
if (reg.strRegError == null)
Console.WriteLine ("\"myStringValue\" has been successfully set");
else
Console.WriteLine ( "Error: " + reg.strRegError );
// Get string value
Console.WriteLine ("GET");
string strValue = reg.GetStringValue (
Registry.LocalMachine,
"SOFTWARE\\RegClassTest",
"myStringValue"
);
if (reg.strRegError == null)
Console.WriteLine ("myStringValue = \"{0}\"", strValue);
else
Console.WriteLine ( "Error: " + reg.strRegError );
Console.WriteLine ("\npress return to exit");
Console.ReadLine ();
}
如果您插入上面的代码并运行项目,您将看到以下输出:

我已经为您准备了一个 完整示例——一个示例项目,演示了如何检索和设置 String
、DWORD
和 Binary
值,如何获取值的类型,如何创建新值以及如何删除注册表值和键。
执行完整示例后,您应该会看到以下输出:

后记
我花了很长时间寻找一个处理注册表的类。但我一无所获(甚至在 MSDN 上也没有)。所以我写了 clsRegistry
。这是第一次尝试。我希望您能帮助我扩展和改进它。您的建议一如既往地受到欢迎。
- Alexandr Khilov