C#中提供的與註冊表相關的最主要的是兩個類:
Registry 和 RegistryKey,這兩個類屬於Microsoft.Win32命名空間
Registry類包含5個公用的靜態域,分別代表5個基本主鍵分別是:
Registry.ClassesRoot
Registry.CurrentUser
Registry.LocalMachine
Registry.Users
Registry.Current Config
這5個類分別對應註冊表的第二級目錄的五個預定義主鍵
RegistryKey類中提供了對註冊表操作的方法
CreateSubKey //建立一個子鍵
OpenSubKey //開啟一個子鍵
DeleteKey //刪除一個子鍵
DeleteKeyTree//刪除一個鍵及其下的全部鍵
GetValue //擷取索引值
SetValue //設定索引值
建立子健並設定索引值的樣本:
代碼
private void WTRegedit(string name,string tovalue)
{
RegistryKey hklm = Registry.LocalMachine;
RegistryKey software = hklm.OpenSubKey("SOFTWARE",true);
RegistryKey aimdir = software.CreateSubKey("XXX");
aimdir.SetValue(name,tovalue);
}
刪除一個索引值的樣本:
代碼
private void DeleteRegist(string name)
{
string[] aimnames;
RegistryKey hkml = Registry.LocalMachine;
RegistryKey software = hkml.OpenSubKey("SOFTWARE",true);
aimnames = software.GetSubKeyNames();
foreach(string aimKey in aimnames)
{
if(aimKey == name)
aimdir.DeleteSubKeyTree(name);
}
}
說到了刪除索引值就必須關注另外一個問題:系統許可權!直接刪除一個鍵會觸發執行未授權的操作異常
這又涉及到另外一個類RegistrySecurity,它屬於System.Security.AccessControl命名空間
RegistrySecurity 對象指定了登錄機碼的存取權限,以及如何審核訪問企圖。對登錄機碼的存取權限體現為規則,每個訪問規則由一個 RegistryAccessRule 對象表示。每個審核規則都由一個 RegistryAuditRule 對象表示
若要將存取控制安全性從一個登錄機碼複製到另一個登錄機碼,請使用 RegistryKey.GetAccessControl 方法擷取表示第一個登錄機碼的訪問規則和審核規則的 RegistrySecurity 對象,然後使用 RegistryKey.SetAccessControl 方法或一個接受 RegistrySecurity 對象的建構函式將規則指定給第二個登錄機碼
範例程式碼:
代碼
RegistrySecurity rsy = new RegistrySecurity();
RegistryAccessRule rar=new RegistryAccessRule(Environment.UserDomainName+
"\\"+Environment.UserName,RegistryRights.ReadKey|RegistryRights.WriteKey|
RegistryRights.Delete,InheritanceFlags.ContainerInherit,PropagationFlags.None,
AccessControlType.Allow);
rsy.AddAccessRule(rar);
RegistryKey cu = Registry.CurrentUser;
RegistryKey rk = cu.CreateSubKey("test1", RegistryKeyPermissionCheck.ReadWriteSubTree, rsy);
RegistryKey rky = rk.CreateSubKey("test2",RegistryKeyPermissionCheck.ReadWriteSubTree);
cu.DeleteSubKeyTree("test1");