前言:

使用Windows系统,经常会遇到需要做注册表的操作。例如,一些软件需要修改注册表、自己编写的软件需要新建注册表进行写入注册信息等等。以下内容以某常见的数据库操作客户端为例,做一个注册表操作的学习。

1、例如,找一个已经注册表过期的软件,记录一下时间和当前过期的效果。

2、参考C#操作注册表官方文档:

https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.win32.registrykey?redirectedfrom=MSDN&view=net-6.0

3、官方示例代码:

using System;
using System.Security.Permissions;
using Microsoft.Win32;

class RegKey
{
static void Main()
{
// Create a subkey named Test9999 under HKEY_CURRENT_USER.
RegistryKey test9999 =
Registry.CurrentUser.CreateSubKey("Test9999");
// Create two subkeys under HKEY_CURRENT_USER\Test9999. The
// keys are disposed when execution exits the using statement.
using(RegistryKey
testName = test9999.CreateSubKey("TestName"),
testSettings = test9999.CreateSubKey("TestSettings"))
{
// Create data for the TestSettings subkey.
testSettings.SetValue("Language", "French");
testSettings.SetValue("Level", "Intermediate");
testSettings.SetValue("ID", 123);
}

// Print the information from the Test9999 subkey.
Console.WriteLine("There are {0} subkeys under {1}.",
test9999.SubKeyCount.ToString(), test9999.Name);
foreach(string subKeyName in test9999.GetSubKeyNames())
{
using(RegistryKey
tempKey = test9999.OpenSubKey(subKeyName))
{
Console.WriteLine("\nThere are {0} values for {1}.",
tempKey.ValueCount.ToString(), tempKey.Name);
foreach(string valueName in tempKey.GetValueNames())
{
Console.WriteLine("{0,-8}: {1}", valueName,
tempKey.GetValue(valueName).ToString());
}
}
}

using(RegistryKey
testSettings = test9999.OpenSubKey("TestSettings", true))
{
// Delete the ID value.
testSettings.DeleteValue("id");

// Verify the deletion.
Console.WriteLine((string)testSettings.GetValue(
"id", "ID not found."));
}

// Delete or close the new subkey.
Console.Write("\nDelete newly created registry key? (Y/N) ");
if(Char.ToUpper(Convert.ToChar(Console.Read())) == 'Y')
{
Registry.CurrentUser.DeleteSubKeyTree("Test9999");
Console.WriteLine("\nRegistry key {0} deleted.",
test9999.Name);
}
else
{
Console.WriteLine("\nRegistry key {0} closed.",
test9999.ToString());
test9999.Close();
}
}
}

4、做一个测试清理Navicat注册表的demo,当作学习使用。

核心代码:

RegistryKey regKey = Registry.CurrentUser;

RegistryKey regKey2 = regKey.OpenSubKey(@"Software\Classes\CLSID",true);
string[] keyNameColl;
keyNameColl = regKey2.GetSubKeyNames();
List<string> keyNames = new List<string>();
foreach (string key in keyNameColl) {
var subKeys = regKey2.OpenSubKey(key,true);
var subKeyNames = subKeys.GetSubKeyNames();
if(subKeyNames!=null && subKeyNames.Length==1 && subKeyNames[0] == "Info")
{
keyNames.Add(key);
}
subKeys?.Close();
}
foreach (var key in keyNames) {
regKey2.DeleteSubKeyTree(key,false);
Console.WriteLine($"[HKEY_CURRENT_USER\\Software\\Classes\\CLSID\\{key}]");
}
regKey2.Close();
regKey.Close();

5、写好代码以后,编译成功即可使用。

6、执行完毕以后,进行重写打开Navicat15验证下,发现试用期被重置了,说明注册表操作是成功的。

【警告】该操作仅用于学习用途,旨在帮助大家熟悉使用C#进行注册表的操作,严禁用于其他非法用途。

如果需要注册表操作的源码,可以在公众号【Dotnet Dancer】后台回复【清理注册表】即可获取。

最新文章

  1. grep
  2. SpringMvc+Spring+Mybatis的jar包依赖关系图
  3. RestTemplate
  4. linux 下网站压力测试工具webbench
  5. oracle创建第三方数据接口表,指定特定用户访问某张表
  6. 工作总结:MFC调用Windows自带新建、保存对话框代码
  7. 关于Hibemate
  8. &#39;swap file &quot;xx&quot; exists&#39; linux
  9. ss命令,显示socket状态
  10. The EF 6.x DbContextGenerator templates are not available for VS2010
  11. GBK转utf-8,宽字符转窄字符
  12. CC++刚開始学习的人编程教程(9) Windows8.1安装VS2013并捆绑QT与编程助手
  13. TCP三次握手中,为什么需要第三次握手?
  14. Java: AutoCloseable接口
  15. Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: org/springframework/boot/context/embedded/ServletRegistrationBean
  16. 冲刺NO.12
  17. 大数据入门到精通14--hive 对 字符串的操作
  18. 解决Java Web项目中Word、Excel等二进制文件编译后无法打开的问题
  19. [py][mx]django注册-邮件激活
  20. mysql 怎么给一个表一次增加多个字段, mysql 添加 多个 字段

热门文章

  1. 从 Numpy+Pytorch 到 TensorFlow JS:总结和常用平替整理
  2. typora使用CSDN图床
  3. 【JVM调优】Day02:CMS的三色标记算法、分区的G1回收器、短时停顿的ZGC回收器
  4. python 实现RSA数字签名
  5. vue引入高德地图
  6. [编程基础] C和C++内置宏说明
  7. (3)go-micro微服务项目搭建
  8. (8)go-micro微服务Mysql配置
  9. P8701 [蓝桥杯 2019 国 B] 第八大奇迹
  10. nmap脚本详解