`
coolszy
  • 浏览: 1415567 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

C#操作注册表全攻略

阅读更多

       相信每个人对注册表并不陌生,在运行里面输入“regedit”就可以打开注册表编辑器了。这东西对Windows系统来说可是比较重要的,也是病毒常常会光顾的地方,比如病毒和恶意软件常常会在注册表的启动项里面写入自己的启动键值来达到自启动的目的,有些病毒还会修改注册表里面来映像劫持杀毒软件,这是破坏系统的第一步。同时,大多软件(软件的序列号和信息)和硬件信息、系统信息、安全模式等等设置都保存在这里,因此系统的健康在很大程度上要依赖注册表的健康。

       作为编程开发人员,我们有必要了解注册表并学会操作注册表。下面我们就来用.NET下托管语言C#操作注册表,主要内容包括:注册表项的创建,打开与删除、键值的创建(设置值、修改),读取和删除、判断注册表项是否存在、判断键值是否存在。

准备工作:

1:要操作注册表,我们必须要引入必要的命名空间:

using Microsoft.Win32;

 
在这个命名空间里面包含了许多注册表相关的类,足够我们使用了~~

2:命名空间里面提供了一个类:RegistryKey   利用它我们可以定位到注册表最开头的分支:

ClassesRoot,CurrentUser,Users,LocalMachine,CurrentConfig

如:RegistryKey key = Registry.LocalMachine;

3:在操作的过程中涉及到子分支,要用\\进行深入,单个\会报错!

4:最后要调用RegistryKey对象的Close()关闭对注册表的修改~~~

5:以下我们的例子都是在LocalMachine分支下,请注意。



一:注册表项的创建,打开与删除

1:创建:

创建注册表项主要用到RegistryKey 的CreateSubKey()方法。如:

RegistryKey key = Registry.LocalMachine;

RegistryKey software = key.CreateSubKey("software\\test");  

//在HKEY_LOCAL_MACHINE\SOFTWARE下新建名为test的注册表项。如果已经存在则不影响!

 


2:打开:

打开注册表项主要用到RegistryKey 的OpenSubKey()方法。如:

RegistryKey key = Registry.LocalMachine;

RegistryKey software = key.OpenSubKey("software\\test",true);  

//注意该方法后面还可以有一个布尔型的参数,true表示可以写入。

 
注意,如果该注册表项不存在,这调用这个方法会抛出异常



3:删除:

删除注册表项主要用到RegistryKey 的DeleteSubKey()方法。如:

RegistryKey key = Registry.LocalMachine;

key.DeleteSubKey("software\\test",true);    //该方法无返回值,直接调用即可

key.Close();

 
注意,如果该注册表项不存在,这调用这个方法会抛出异常



二:键值的创建(设置值、修改),读取和删除

1:创建(设置值、修改):

对键值的创建修改等操作主要用到RegistryKey 的SetValue()方法

RegistryKey key = Registry.LocalMachine;

RegistryKey software = key.OpenSubKey("software\\test",true); //该项必须已存在

software.SetValue("test", "coolszy"); 

 //在HKEY_LOCAL_MACHINE\SOFTWARE\test下创建一个名为“test”,值为“coolszy”的键值。如果该键值原本已经存在,则会修改替换原来的键值,如果不存在则是创建该键值。

// 注意:SetValue()还有第三个参数,主要是用于设置键值的类型,如:字符串,二进制,Dword等等~~默认是字符串。如:

// software.SetValue("test", "0", RegistryValueKind.DWord); //二进制信息

Key.Close();



2:读取:

string info = "";

RegistryKey Key;

Key = Registry.LocalMachine;

myreg = Key.OpenSubKey("software\\test");  

// myreg = Key.OpenSubKey("software\\test",true);

info = myreg.GetValue("test").ToString();

myreg.Close();

 

info结果为:coolszy


3:删除:

RegistryKey delKey = Registry.LocalMachine.OpenSubKey("Software\\test", true);

delKey.DeleteValue("test");

delKey.Close();

 


细心的读者可能发现了第二个例子中OpenSubKey()方法参数与其他例子的不同。

如果你要修改键值,包括创建、设置、删除键值等都要在方法后面加个布尔参数,设置为true,表示可写可改;如果仅仅只是读取键值可以不加,此时可写关闭,你不能再往里写值(当然,你要加也可以true)!

还有读者提到读写默认键值的问题,主要在设置、读取的方法中将键名置空则就是对默认键值的操作。

如:

software.SetValue("", "coolszy"); //   在HKEY_LOCAL_MACHINE\SOFTWARE\test修改默认键值的值为“博coolszy”。读取类似!

另外,默认的键值是不能删除的,所以不要用DeleteValue()方法去删除,会抛出异常的!





三:判断注册表项是否存在

private bool IsRegeditItemExist()

{

    string[] subkeyNames;

    RegistryKey hkml = Registry.LocalMachine;

RegistryKey software = hkml.OpenSubKey("SOFTWARE");

//RegistryKey software = hkml.OpenSubKey("SOFTWARE", true);

subkeyNames = software.GetSubKeyNames(); 

//取得该项下所有子项的名称的序列,并传递给预定的数组中

    foreach (string keyName in subkeyNames)   //遍历整个数组

    {

         if (keyName == "test") //判断子项的名称

         {             

             hkml.Close();

             return true;

          }

       }

         hkml.Close();

         return false;            

}

 


四:判断键值是否存在

private bool IsRegeditKeyExit()

{

    string[] subkeyNames;

    RegistryKey hkml = Registry.LocalMachine;

RegistryKey software = hkml.OpenSubKey("SOFTWARE\\test");

    //RegistryKey software = hkml.OpenSubKey("SOFTWARE\\test", true);

    subkeyNames = software.GetValueNames();

//取得该项下所有键值的名称的序列,并传递给预定的数组中

    foreach (string keyName in subkeyNames)

    {

         if (keyName == "test")   //判断键值的名称

         {

            hkml.Close();

            return true;

          }

    }

         hkml.Close();

         return false;

    }

 

       至此,C#操作注册表就到此为止了。本文几乎囊括了C#语言对注册表的所有操作,只要认真看完此文,认真时间就肯定对注册表的读取修改游刃有余了。

注:本文所有例子在VS2008+WinXP下调试通过…

分享到:
评论

相关推荐

    Visual C# 轻松入门全攻略

    综上所述,《Visual C# 轻松入门全攻略》不仅覆盖了C#语言的基础,还深入探讨了面向对象编程、GUI开发、数据库操作和数据交换等关键领域。通过系统学习和实践,读者可以快速掌握C#编程技能,为成为专业的.NET开发者...

    使用C#开发ActiveX控件全攻略

    【使用C#开发ActiveX控件全攻略】 ActiveX控件是Microsoft的一种技术,它基于组件对象模型(Component Object Model,简称COM),在分布式环境中,COM可以转变为分布式COM(DCOM)。ActiveX控件最初是为了对抗Sun ...

    C#PDF打印技术实例讲解

    除此之外,"ITextSharp中文教程用C#制作PDF文件全攻略.pdf"提供了更全面的教程,它不仅涵盖基础操作,还可能包括进阶功能,如书签、超链接、表单字段等。这个教程对于初学者来说非常有用,可以帮助他们快速上手并...

    编程技术 编程技术C# VB jsp delphi VC++ CGI程序制作 Linux编程 等等太多了

    5.MYSQL性能优化全攻略 6.用PHP生成自己的LOG文件 7.C++Builder 注册表的操作 8.C++Builder 编写tray程序 9.UNIX多进程编程 10.~~~~~~~ ........................... jsp delphi VC++ CGI程序制作 Linux编程 等等太...

    ASP.NET 2.0+SQL Server 2005全程指南-源代码

    2.4 C#语言中的操作符和表达式 2.4.1 赋值运算符 2.4.2 算术运算符 2.4.3 比较(关系)运算符 2.4.4 逻辑运算符 2.4.5 位运算符 2.5 C#语言中的控制语句 2.5.1 选择语句 2.5.2 循环语句 2.6 异常处理 ...

    亮剑.NET深入体验与实战精要2

    3.3.1 页面数据绑定全攻略 131 3.3.2 Bind和Eval的区别 140 3.4 ASP.NET编程中的技巧 142 3.4.1 页面之间传值的7种方法 142 3.4.2 get与post方法的区别 146 3.4.3 ASP.NET服务器控件和 HTML控件的区别 146 3.4.4 ...

    亮剑.NET深入体验与实战精要3

    3.3.1 页面数据绑定全攻略 131 3.3.2 Bind和Eval的区别 140 3.4 ASP.NET编程中的技巧 142 3.4.1 页面之间传值的7种方法 142 3.4.2 get与post方法的区别 146 3.4.3 ASP.NET服务器控件和 HTML控件的区别 146 3.4.4 ...

Global site tag (gtag.js) - Google Analytics