首页 > 数据库 >C#操作注册表简单教程(附带操作某数据库客户端注册表以实现重置试用期的效果)

C#操作注册表简单教程(附带操作某数据库客户端注册表以实现重置试用期的效果)

时间:2023-02-20 13:57:34浏览次数:65  
标签:Console WriteLine C# key 注册表 test9999 试用期 testSettings


 前言:

使用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】后台回复【清理注册表】即可获取。

标签:Console,WriteLine,C#,key,注册表,test9999,试用期,testSettings
From: https://www.cnblogs.com/weskynet/p/17137077.html

相关文章

  • wmic 常用的获取计算机信息的命令
    wmicosgetsystemdirectory#获取系统的安装路径wmicbiosgetserialnumber#获取主板的序列号wmiccpugetname#获取CPU的名字wmiccomputersystemgetmodel......
  • Java 调用 PaddleDetection 模型
    文章地址介绍训练好的模型要给业务调用,deepjavalibrary/djl:Java中与引擎无关的深度学习框架(github.com)可以完成这件事,它支持使用Java调用PyTorch、TensorFlow、M......
  • C# 的基本代码规范
    个人遵守的通用C#代码规范,其中参考了微软的代码规范。实际上在是使用一些框架开发时(例如ASP.NETCore)也应该遵循一定的模式规范,但是本文只讨论一些比较通用的代码规范。......
  • java.sql.SQLFeatureNotSupportedException错误的解决方式
    今天在学习黑马的瑞吉外卖项目中遇到了java.sql.SQLFeatureNotSupportedException错误debug调试后发现是service进行访问数据库时未能成功连接数据库,对比过application......
  • typescript+vue3使用vue-ls
    npmivue-ls新建storage.tsimportStoragefrom'vue-ls';constoptions={namespace:'vuejs__',//keyprefixname:'ls',//namevariableVue.[ls]ort......
  • MFC-键盘消息
           ......
  • TreeSet的使用以及Comparator接口
    packageedu.wtbu;importjava.util.Comparator;importjava.util.Iterator;importjava.util.TreeSet;publicclassDemo01{publicstaticvoidmain(String[]args......
  • C/C++学生选课管理系统[2023-02-20]
    C/C++学生选课管理系统[2023-02-20]4.15学生选课管理系统题目描述:假定有n门课程,每门课程有课程编号,课程名称,课程性质(必须/选修),学时,授课学时,实验或上机学时,学分等信......
  • 微信小程序全局变量(globalData)和缓存(StorageSync)的区别和用法
    globalData和storage的区别一、app.globalData是全局变量,下次进入的时候,就要重新获取,一般用于:1、保存一些可能涉及安全类的数据,例如资源类,每次需要很准确的,就建议用全......
  • iChatGPT隐私政策
    iChatGPTrespectsandprotectstheprivacyofalluserswhousetheservice.Inordertoprovideyouwithmoreaccurateandpersonalizedservices,iChatGPTwi......