C#操作注册表的方法
作者:springsnow 时间:2022-04-14 03:20:36
一、注册表操作简介
Registry类,RegistryKey类提供了操作注册表的接口
RegistryValueKind:用于指定操作注册表的数据类型
注册表巢
在注册表中,最上面的节点是注册表巢(registry hive)。
HKEY_CLASSES_ROOT(HKCR) 包含系统文件类型的细节,以及应用程序可以打开的文件类型,它还包含所有COM组件的注册信息。
HKEY_CURRENT_USER(HKCU) 包含用户目前登陆的机器的用户配置,包括桌面设置、环境变量、网络和打印机连接和其他定义用户操作环境的变量。
HKEY_LOCAL_MACHINE(HKLM) 是一个很大的巢,其中包含所有安装到机器上的软件和硬件的信息。
HKEY_USERS(HKUSR) 包含所有用户的用户配置。
HKEY_CURRENT_CONFIG(HKCF) 包含机器上硬件的信息。
Registry静态类
Registry类封装了注册表的七个基本主键:
Registry.ClassesRoot: 对应于HKEY_CLASSES_ROOT主键
Registry.CurrentUser:对应于HKEY_CURRENT_USER主键
Registry.LocalMachine:对应于 HKEY_LOCAL_MACHINE主键
Registry.User:对应于 HKEY_USER主键
Registry.CurrentConfig:对应于HEKY_CURRENT_CONFIG主键
Registry.DynDa :对应于HKEY_DYN_DATA主键
Registry.PerformanceData:对应于HKEY_PERFORMANCE_DATA主键
const string KeyName = "HKEY_CURRENT_USER\\Example";
Registry.SetValue(keyName, "", 5280);//默认名称
Registry.SetValue(keyName, "TestLong", 1234567, RegistryValueKind.QWord);
int i = (int)Registry.GetValue(keyName, "", -1);//默认值
long l = (long)Registry.GetValue(keyName, "TestLong", long.MinValue);
RegistryKey类
RegistryKey类封装了对注册表的基本操作。包括读、写、删等操作的常用函数:
Name:键的名称(只读)
SubKeyCount:键的子键个数
ValueCount:键包含的值的个数
Close():关闭键
CreateSubKey():创建给定名称的子键
DeleteSubKey():删除指定的子键
DeleteSubKeyTree():递归删除子键及其所有的子键
DeleteValue():从键中删除一个指定的值
GetAccessControl():返回指定注册表键的访问控制表
GetSubKeyNames():返回包含子键名称的字符串数组
GetValue():返回指定的值
GetValueKind();返回指定的值,检索其注册表数据类型
GetValueNames():返回一个包含所有键值名称的字符串数组
OpenSubKey():返回表示给定子键的RegistryKey实例引用
SetAccessControl():把访问控制表(ACL)应用于指定的注册表键
SetValue();设置指定的值
二、注册表项的创建、打开、删除
1、创建,CreateSubKey
//使用CreateSubKey()在SOFTWARE下创建子项test
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.CreateSubKey(@"SOFTWARE\test");
hklm.Close();
hkSoftWare.Close();
2、打开,OpenSubKey
//使用OpenSubKey()打开项,获得RegistryKey对象,当路径不存在时,为Null。第二个参数为true,表示可写,可读,可删;省略时只能读。
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test",true);
hklm.Close();
hkSoftWare.Close();
3、删除,DeleteSubKey
//主要用到了DeleteSubKey(),删除test项
RegistryKey hklm = Registry.LocalMachine;
hklm.DeleteSubKey(@"SOFTWARE\test", true); //为true时,删除的注册表不存在时抛出异常;当为false时不抛出异常。
hklm.Close();
三、注册表键值的创建、打开和删除
1、创建,SetValue
//主要用到了SetValue(),表示在test下创建名称为Name,值为RegistryTest的键值。第三个参数表示键值类型,省略时,默认为字符串
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test",true);
hkSoftWare.SetValue("Name", "RegistryTest", RegistryValueKind.String);
hklm.Close();
hkSoftWare.Close();
2、打开,GetValue
//主要用到了GetValue(),获得名称为"Name"的键值
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test", true);
string sValue = hkSoftWare.GetValue("Name").ToString();
hklm.Close();
hkSoftWare.Close();
3、删除,DeleteValue
//主要用到了DeleteValue(),表示删除名称为"Name"的键值,第二个参数表示是否抛出异常
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test", true);
hkSoftWare.DeleteValue("Name", true);
hklm.Close();
hkSoftWare.Close();
四、例子:
1、判断注册表项、注册表键值是否存在
//判断注册表项是否存在
private bool IsRegistryKeyExist(string sKeyName)
{
string[] sKeyNameColl;
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE");
sKeyNameColl = hkSoftWare.GetSubKeyNames(); //获取SOFTWARE下所有的子项
foreach (string sName in sKeyNameColl)
{
if (sName == sKeyName)
{
hklm.Close();
hkSoftWare.Close();
return true;
}
}
hklm.Close();
hkSoftWare.Close();
return false;
}
//判断键值是否存在
private bool IsRegistryValueNameExist(string sValueName)
{
string[] sValueNameColl;
RegistryKey hklm = Registry.LocalMachine;
RegistryKey hkTest = hklm.OpenSubKey(@"SOFTWARE\test");
sValueNameColl = hkTest.GetValueNames(); //获取test下所有键值的名称
foreach (string sName in sValueNameColl)
{
if (sName == sValueName)
{
hklm.Close();
hkTest.Close();
return true;
}
}
hklm.Close();
hkTest.Close();
return false;
}
2、程序自启动程序
//开启程序自启动
string path = Application.ExecutablePath;
RegistryKey rk = Registry.LocalMachine;
RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
rk2.SetValue("JcShutdown", path);
rk2.Close();
rk.Close();
//关闭程序自启动
string path = Application.ExecutablePath;
RegistryKey rk = Registry.LocalMachine;
RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
rk2.DeleteValue("JcShutdown", false);
rk2.Close();
rk.Close();
五、打开远程注册表
RegistryKey baseKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine,"192.168.0.2");
RegistryKey softwareKey = key.OpenSubKey("software\\test");
softwareKey.Close();
baseKey.Close();
来源:https://www.cnblogs.com/springsnow/p/9434010.html
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
springboot+mybatis-plus 两种方式打印sql语句的方法
![](https://img.aspxhome.com/file/2023/9/64379_0s.jpg)
归并排序的原理及java代码实现
![](https://img.aspxhome.com/file/2023/4/75484_0s.gif)
Unity实现识别图像中主体及其位置
![](https://img.aspxhome.com/file/2023/9/113849_0s.png)
C# List介绍及具体用法
Java并发编程之线程之间的共享和协作
![](https://img.aspxhome.com/file/2023/4/86694_0s.png)
使用okhttp替换Feign默认Client的操作
![](https://img.aspxhome.com/file/2023/6/70536_0s.jpg)
Java的关键字与保留字小结
模拟按Home键退出应用的简单方法(分享)
C#定义简单的反射工厂实例分析
Mybatis-Plus的使用详解
![](https://img.aspxhome.com/file/2023/1/61801_0s.jpg)
C# WinForm实现自动更新程序的方法详解
![](https://img.aspxhome.com/file/2023/7/106407_0s.gif)
详解Android中Intent传递对象给Activity的方法
![](https://img.aspxhome.com/file/2023/7/120137_0s.jpg)
C#中的委托和事件详解
![](https://img.aspxhome.com/file/2023/2/113702_0s.png)
解决微服务中关于用户token处理到的坑
Springboot整合FreeMarker的实现示例
![](https://img.aspxhome.com/file/2023/3/76593_0s.jpg)
java多线程累加计数的实现方法
![](https://img.aspxhome.com/file/2023/7/76277_0s.png)
Java图形化界面编程实现简单计算器
![](https://img.aspxhome.com/file/2023/9/79289_0s.png)
Java 守护线程_动力节点Java学院整理
![](https://img.aspxhome.com/file/2023/7/60177_0s.png)
如何使用MybatisPlus快速进行增删改查详解
![](https://img.aspxhome.com/file/2023/1/58741_0s.png)
Android开发之文件操作详解
![](https://img.aspxhome.com/file/2023/2/105992_0s.png)