C#操作注冊(cè)表的方法
一、注冊(cè)表操作簡介
Registry類,RegistryKey類提供了操作注冊(cè)表的接口
RegistryValueKind:用于指定操作注冊(cè)表的數(shù)據(jù)類型
注冊(cè)表巢
在注冊(cè)表中,最上面的節(jié)點(diǎn)是注冊(cè)表巢(registry hive)。
- HKEY_CLASSES_ROOT(HKCR) 包含系統(tǒng)文件類型的細(xì)節(jié),以及應(yīng)用程序可以打開的文件類型,它還包含所有COM組件的注冊(cè)信息。
- HKEY_CURRENT_USER(HKCU) 包含用戶目前登陸的機(jī)器的用戶配置,包括桌面設(shè)置、環(huán)境變量、網(wǎng)絡(luò)和打印機(jī)連接和其他定義用戶操作環(huán)境的變量。
- HKEY_LOCAL_MACHINE(HKLM) 是一個(gè)很大的巢,其中包含所有安裝到機(jī)器上的軟件和硬件的信息。
- HKEY_USERS(HKUSR) 包含所有用戶的用戶配置。
- HKEY_CURRENT_CONFIG(HKCF) 包含機(jī)器上硬件的信息。
Registry靜態(tài)類
Registry類封裝了注冊(cè)表的七個(gè)基本主鍵:
- Registry.ClassesRoot: 對(duì)應(yīng)于HKEY_CLASSES_ROOT主鍵
- Registry.CurrentUser:對(duì)應(yīng)于HKEY_CURRENT_USER主鍵
- Registry.LocalMachine:對(duì)應(yīng)于 HKEY_LOCAL_MACHINE主鍵
- Registry.User:對(duì)應(yīng)于 HKEY_USER主鍵
- Registry.CurrentConfig:對(duì)應(yīng)于HEKY_CURRENT_CONFIG主鍵
- Registry.DynDa :對(duì)應(yīng)于HKEY_DYN_DATA主鍵
- Registry.PerformanceData:對(duì)應(yīng)于HKEY_PERFORMANCE_DATA主鍵
const string KeyName = "HKEY_CURRENT_USER\\Example"; Registry.SetValue(keyName, "", 5280);//默認(rèn)名稱 Registry.SetValue(keyName, "TestLong", 1234567, RegistryValueKind.QWord); int i = (int)Registry.GetValue(keyName, "", -1);//默認(rèn)值 long l = (long)Registry.GetValue(keyName, "TestLong", long.MinValue);
RegistryKey類
RegistryKey類封裝了對(duì)注冊(cè)表的基本操作。包括讀、寫、刪等操作的常用函數(shù):
- Name:鍵的名稱(只讀)
- SubKeyCount:鍵的子鍵個(gè)數(shù)
- ValueCount:鍵包含的值的個(gè)數(shù)
- Close():關(guān)閉鍵
- CreateSubKey():創(chuàng)建給定名稱的子鍵
- DeleteSubKey():刪除指定的子鍵
- DeleteSubKeyTree():遞歸刪除子鍵及其所有的子鍵
- DeleteValue():從鍵中刪除一個(gè)指定的值
- GetAccessControl():返回指定注冊(cè)表鍵的訪問控制表
- GetSubKeyNames():返回包含子鍵名稱的字符串?dāng)?shù)組
- GetValue():返回指定的值
- GetValueKind();返回指定的值,檢索其注冊(cè)表數(shù)據(jù)類型
- GetValueNames():返回一個(gè)包含所有鍵值名稱的字符串?dāng)?shù)組
- OpenSubKey():返回表示給定子鍵的RegistryKey實(shí)例引用
- SetAccessControl():把訪問控制表(ACL)應(yīng)用于指定的注冊(cè)表鍵
- SetValue();設(shè)置指定的值
二、注冊(cè)表項(xiàng)的創(chuàng)建、打開、刪除
1、創(chuàng)建,CreateSubKey
//使用CreateSubKey()在SOFTWARE下創(chuàng)建子項(xiàng)test RegistryKey hklm = Registry.LocalMachine; RegistryKey hkSoftWare = hklm.CreateSubKey(@"SOFTWARE\test"); hklm.Close(); hkSoftWare.Close();
2、打開,OpenSubKey
//使用OpenSubKey()打開項(xiàng),獲得RegistryKey對(duì)象,當(dāng)路徑不存在時(shí),為Null。第二個(gè)參數(shù)為true,表示可寫,可讀,可刪;省略時(shí)只能讀。 RegistryKey hklm = Registry.LocalMachine; RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test",true); hklm.Close(); hkSoftWare.Close();
3、刪除,DeleteSubKey
//主要用到了DeleteSubKey(),刪除test項(xiàng) RegistryKey hklm = Registry.LocalMachine; hklm.DeleteSubKey(@"SOFTWARE\test", true); //為true時(shí),刪除的注冊(cè)表不存在時(shí)拋出異常;當(dāng)為false時(shí)不拋出異常。 hklm.Close();
三、注冊(cè)表鍵值的創(chuàng)建、打開和刪除
1、創(chuàng)建,SetValue
//主要用到了SetValue(),表示在test下創(chuàng)建名稱為Name,值為RegistryTest的鍵值。第三個(gè)參數(shù)表示鍵值類型,省略時(shí),默認(rèn)為字符串 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"的鍵值,第二個(gè)參數(shù)表示是否拋出異常 RegistryKey hklm = Registry.LocalMachine; RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE\test", true); hkSoftWare.DeleteValue("Name", true); hklm.Close(); hkSoftWare.Close();
四、例子:
1、判斷注冊(cè)表項(xiàng)、注冊(cè)表鍵值是否存在
//判斷注冊(cè)表項(xiàng)是否存在 private bool IsRegistryKeyExist(string sKeyName) { string[] sKeyNameColl; RegistryKey hklm = Registry.LocalMachine; RegistryKey hkSoftWare = hklm.OpenSubKey(@"SOFTWARE"); sKeyNameColl = hkSoftWare.GetSubKeyNames(); //獲取SOFTWARE下所有的子項(xiàng) 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、程序自啟動(dòng)程序
//開啟程序自啟動(dòng) 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(); //關(guān)閉程序自啟動(dòng) 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();
五、打開遠(yuǎn)程注冊(cè)表
RegistryKey baseKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine,"192.168.0.2"); RegistryKey softwareKey = key.OpenSubKey("software\\test"); softwareKey.Close(); baseKey.Close();
到此這篇關(guān)于C#操作注冊(cè)表的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#實(shí)現(xiàn)Word和ODT文檔相互轉(zhuǎn)換詳解
ODT文檔格式一種開放文檔格式(OpenDocument Text)。本文以C#及VB.NET代碼展示ODT和Word文檔之間相互轉(zhuǎn)換的方法,感興趣的可以學(xué)習(xí)一下2022-05-05Unity?百度AI實(shí)現(xiàn)Logo商標(biāo)識(shí)別
本文主要介紹了Unity實(shí)現(xiàn)檢測和識(shí)別圖片中的品牌LOGO信息。即對(duì)于輸入的一張圖片(可正常解碼,且長寬比適宜),輸出圖片中LOGO的名稱、位置和置信度。需要的可以參考一下2022-01-01C#?彈出窗口show()和showdialog()的兩種方式
本文主要介紹了C#?彈出窗口show()和showdialog()的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07C# Onnx實(shí)現(xiàn)特征匹配DeDoDe檢測
這篇文章主要為大家詳細(xì)介紹了C# Onnx如何實(shí)現(xiàn)特征匹配DeDoDe檢測,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11