C#操作注册表全攻略
相信每个人对注册表并不陌生,在运行里面输入“regedit”就可以打开注册表编辑器了。这东西对Windows系统来说可是比较重要的,也是病 毒常常会光顾的地方,比如病毒和恶意软件常常会在注册表的启动项里面写入自己的启动键值来达到自启动的目的,有些病毒还会修改注册表里面来映像劫持杀毒软 件,这是破坏系统的第一步。同时,大多软件(软件的序列号和信息)和硬件信息、系统信息、安全模式等等设置都保存在这里,因此系统的健康在很大程度上要依 赖注册表的健康。
作为编程开发人员,我们有必要了解注册表并学会操作注册表。下面我们就来用.NET下托管语言C#操作注册表,主要内容包括:注册表项的创建,打开与删除、键值的创建(设置值、修改),读取和删除、判断注册表项是否存在、判断键值是否存在。
准备工作:
1:要操作注册表,我们必须要引入必要的命名空间:
- using Microsoft.Win32;
- 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的注册表项。如果已经存在则不影响!
- 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表示可以写入。
- 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();
- 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" );
- 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();
- 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();
- 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 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 ;
- }
- 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下调试通过…
C#操作注册表全攻略的更多相关文章
- webBrowser中操作网页元素全攻略
原文 webBrowser中操作网页元素全攻略 1.获取非input控件的值: webBrowser1.Document.All["控件ID"].InnerText; 或webBr ...
- [Perl]Windows 系统 Unicode 文件名操作(新建、重命名、枚举、复制)全攻略
[Perl] Windows 系统 Unicode 文件名操作(新建.重命名.枚举.复制)全攻略 环境 XP/WIN7 Perl v5.16 编辑整理:PerlMonk.523066680 常见的那些 ...
- C++字符串【string】和【char []】操作全攻略
异想之旅:本人博客完全手敲,绝对非搬运,全网不可能有重复:本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告.本人所有文章发布平台为CSDN.博客园.简书和开源中国,后期可能会有个人博客,除此之外 ...
- 在net安装程序中部署oracle客户端全攻略
在net安装程序中部署oracle客户端全攻略 主要的是要做三件工作: 打包文件,写注册表,注册环境变量说明:我的oracle版本为9, 在2000 advanced server 上测试通过,可以正 ...
- Windows Socket五种I/O模型——代码全攻略(转)
Winsock 的I/O操作: 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字 默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操 ...
- Moon.Orm3.8技术全攻略
Moon.ORM技术全攻略 一.绪论 本文主要是针对Moon.ORM的技术的讨论及其使用使用指导.如有其它疑问,请留言.本文主要针对Moon.ORM3.9版本,同时将会对4.0做一个技术预览.本文从 ...
- 【转】轻松搞定FTP之FlashFxp全攻略
转载网址:http://www.newhua.com/2008/0603/39163.shtml 轻松搞定FTP之FlashFxp全攻略 导读: FlashFXP是一款功能强大的FXP/FTP软件,融 ...
- Android使用XML全攻略(1)
Android使用XML全攻略(1) Android 是针对移动设备的一种新兴的开源操作系统和 SDK.借助它,您可以创建功能强大的移动应用程序.当您的应用程序可以访问 Web 服务时,其吸引力 ...
- 【转载】Google Analytics 使用图文全攻略
转载自:Google Analytics 使用图文全攻略 最近一段时间,因为工作的需要,小励使用GA(GA是Google Analytics的简称)比较频繁,所以花时间研究了一下,从不太了解到会使用( ...
随机推荐
- 1、android源代码下载与跟踪
学习Android源代码的目的 理解Android API查找API(Activity.Content Provider等) 高级应用开发(ROM定制) 在不同平台下载Android源代码 W ...
- android开发软件
android开发软件: http://developer.android.com/sdk/index.html#download
- hdu 5256 LIS变形
给一个数列,问最少修改多少个元素使数列严格递增.如果不是要求“严格”递增,那就是求最长不降子序列LIS,然后n-LIS就是答案.要严格递增也好办,输入的时候用每个数减去其下标处理一下就行了. /* * ...
- LoadRunner error -27728
错误现象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired whendownloading no ...
- [转]Struts标签库详解
本文转自:http://hi.baidu.com/xzkcz/blog/item/5cf9f91f01beb9f4e0fe0bd4.html Struts提供了五个标签库,即:HTML.Bean. ...
- C.xml
pre{ line-height:1; color:#1e1e1e; background-color:#f0f0f0; font-size:16px;}.sysFunc{color:#627cf6; ...
- 批量还原数据库 SQL Server 2008
1.如果你够懒,不想一步一步点路径,一步一步选择 2.如果你连单个备份数据库的存储过程都不想多执行,一般每还原一个需要修改数据库名 下面的脚本适合你: /*********************** ...
- 判断浏览器是IE的几种方式
<script> if(!+[1,])alert("这是ie浏览器"); else alert("这不是ie浏览器"); </script&g ...
- Java的平台无关性
转载自:http://www.cnblogs.com/Y/archive/2011/03/22/JavaVM_Learning_Chapter2_Platform_Independence.html ...
- 开始使用Ambari吧
最开始接触Hadoop是研究生入学后,帮师姐装装集群什么的.过程很繁琐,很重复,很是让人抓狂.当时装一个三台机器的集群需要两天左右,这还是装的很熟练的时间花费,刚入手的时候简直是惨不忍睹,三台机器装了 ...