首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 登錄表操作完整指南:Registry 與 RegistryKey 類別實戰

     編輯:關於C語言

Windows 登錄表架構概覽

Windows 登錄表採樹狀結構儲存系統與應用程式設定,根鍵下包含五個預定義主鍵:

  • HKEY_CLASSES_ROOT (HKCR):檔案關聯、COM 物件註冊、Shell 擴充資訊。實為 HKLM\Software\Classes 映射。
  • HKEY_CURRENT_USER (HKCU):目前使用者的個人化設定(桌面、視窗偏好等)。
  • HKEY_LOCAL_MACHINE (HKLM):電腦層級的硬體、軟體安裝設定,所有使用者共用。
  • HKEY_USERS (HKU):所有使用者設定檔,登入時建立對應子鍵。應用程式通常透過 HKCU 存取而非直接操作 HKU。
  • HKEY_CURRENT_CONFIG (HKCC):目前硬體設定檔,隨網路/驅動程式變動調整。

.NET Framework 登錄表操作類別

Microsoft.Win32 命名空間提供兩個密封類別:

  • Registry:提供 7 個靜態唯讀欄位對應根鍵(ClassesRoot、CurrentUser、LocalMachine、Users、CurrentConfig 等),作為操作起點。
  • RegistryKey:實際操作方法(建立、開啟、刪除、讀寫)定義於此。注意:操作需足夠權限,否則拋出例外。

核心操作方法詳解

建立子鍵

public RegistryKey CreateSubKey(string subkey);
// 參數:子鍵名稱或路徑。成功回傳建立的 RegistryKey,失敗回傳 null。

開啟子鍵

public RegistryKey OpenSubKey(string name);
public RegistryKey OpenSubKey(string name, bool writable);
// writable=true 可讀寫,false 唯讀(預設)。
// 遠端電腦登錄表:RegistryKey.OpenRemoteBaseKey(RegistryHive hKey, string machineName)

刪除子鍵

public void DeleteSubKey(string subkey);        // 僅刪除空子鍵
public void DeleteSubKeyTree(string subkey);    // 遞刪子鍵及所有後代

讀取值

public object GetValue(string name);
public object GetValue(string name, object defaultValue);
// 找不到回傳 null,或指定 defaultValue 避免 null。

寫入值

public void SetValue(string name, object value);
// value 型別決定登錄值型別(字串→REG_SZ,整數→REG_DWORD 等)。

實戰範例:應用程式設定儲存

using Microsoft.Win32;

const string AppPath = @"Software\MyCompany\MyApp";

// 寫入設定
using (RegistryKey key = Registry.CurrentUser.CreateSubKey(AppPath))
{
    key.SetValue("WindowWidth", 1024);
    key.SetValue("LastFolder", @"D:\Projects");
    key.SetValue("AutoSave", true);
}

// 讀取設定
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(AppPath))
{
    int width = (int)key.GetValue("WindowWidth", 800);
    string folder = (string)key.GetValue("LastFolder", @"C:\");
    bool autoSave = (bool)key.GetValue("AutoSave", false);
}

注意事項

  • Vista 之後寫入 HKLM 需系統管理員權限(UAC)。
  • 64 位元系統下,32 位元應用程式預設導向 Wow6432Node,需用 RegistryView.Registry64 存取原生 64 位元視圖。
  • 善用 using 區塊確保 RegistryKey 正確釋放。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved