Windows 的登錄編輯程式 (Registry Editor) 就像是作業系統的「大腦資料庫」,儲存了硬體、軟體及使用者設定的所有細節。

這五個以 HKEY 開頭的目錄稱為「根鍵 (Root Keys)」,各有不同的分工。以下為你詳細解析:


1. HKEY_CLASSES_ROOT (HKCR)

主要功能:副檔名關聯與 OLE 物件資料。

這個部分決定了當你點擊一個檔案時,系統要用哪個程式開啟。

  • 儲存內容: 檔案副檔名(如 .txt, .pdf, .mp4)與應用程式的對應關係,以及 COM 元件的註冊資訊。

  • 小知識: 它其實是 HKEY_LOCAL_MACHINE\Software\ClassesHKEY_CURRENT_USER\Software\Classes 的合併視圖,優先以使用者的設定為主。

2. HKEY_CURRENT_USER (HKCU)

主要功能:目前登入使用者的個人化設定。

這是最常被修改的部分,因為它只影響「現在正在用電腦的人」。

  • 儲存內容: 桌面背景、螢幕保護程式、網路連線、個人軟體偏好(例如瀏覽器的書籤、Office 的介面顏色)。

  • 優點: 當不同人登入同一台電腦時,HKCU 的內容會隨之切換。

3. HKEY_LOCAL_MACHINE (HKLM)

主要功能:電腦硬體與全域軟體配置。

這是 Registry 中最重要的部分,儲存了對這台電腦所有使用者都生效的設定。

  • 儲存內容: Windows 系統啟動設定、驅動程式、硬體規格、安裝在電腦上的軟體路徑及序號。

  • 權限: 修改這裡通常需要管理員權限,因為更動不當可能導致系統無法開機。

4. HKEY_USERS (HKU)

主要功能:所有使用者的設定檔。

這裡存放了電腦上每個使用者的個人資訊。

  • 儲存內容: 包含每個已建立帳戶的設定檔。

  • 關聯: 先前提到到的 HKEY_CURRENT_USER 其實只是指向 HKEY_USERS 中「目前使用者 ID」的一個快捷方式。

5. HKEY_CURRENT_CONFIG (HKCC)

主要功能:目前的硬體設定檔。

這是當前啟動時,系統所使用的硬體資訊快取。

  • 儲存內容: 主要是顯示器解析度、印表機設定等與目前硬體環境有關的即時資訊。

  • 特性: 它是 HKEY_LOCAL_MACHINE\Config 的一個對應,通常不建議手動修改。


快速對照表

根鍵 (Root Key) 簡稱 核心功能 影響範圍
HKEY_CLASSES_ROOT HKCR 檔案關聯與 COM 物件 全系統/使用者
HKEY_CURRENT_USER HKCU 目前使用者的個人偏好 僅限目前帳戶
HKEY_LOCAL_MACHINE HKLM 系統硬體與全局軟體設定 所有帳戶 (整台電腦)
HKEY_USERS HKU 所有使用者帳戶的資料夾 所有已建立帳戶
HKEY_CURRENT_CONFIG HKCC 目前啟動時的硬體配置 暫時性硬體資訊

提醒: 登錄檔是系統核心,修改前建議先匯出備份,以免設定錯誤導致系統不穩定。

我開發一些系統 有註冊的東西 放哪裡好 ?

在開發系統時,選擇將註冊資訊(如序號、授權狀態、安裝路徑等)放在登錄編輯程式的哪個位置,主要取決於你的**「部署策略」「權限需求」**。

通常有兩個主要選擇,以下是詳細的分析與建議:


1. HKEY_LOCAL_MACHINE (HKLM) —— 全域註冊

路徑: HKEY_LOCAL_MACHINE\SOFTWARE\你的公司名\你的系統名\

  • 適用情境: 這台電腦上的所有使用者都能執行該軟體,且共享同一份註冊資訊(例如:公司買了一台電腦的授權)。

  • 優點: 集中管理,不論誰登入,軟體都能找到註冊狀態。

  • 缺點: 需要管理員權限才能寫入。如果你的安裝程式或軟體沒有以「系統管理員身分」執行,寫入會失敗。

2. HKEY_CURRENT_USER (HKCU) —— 個人註冊

路徑: HKEY_CURRENT_USER\SOFTWARE\你的公司名\你的系統名\

  • 適用情境: 註冊資訊僅對目前登入的使用者有效。如果是「按人頭計費」的軟體,或是希望使用者在沒有管理員權限下也能完成註冊,這是首選。

  • 優點: 不需要管理員權限即可寫入,對系統安全性影響較小,且符合現代軟體開發的規範。

  • 缺點: 若換成另一個 Windows 帳號登入,該使用者會看到「未註冊」狀態。


開發建議:最佳實踐做法

現在多數開發者會採取**「混合式」「優先權」**的做法:

  1. 讀取順序: 程式啟動時,先檢查 HKCU,如果沒有,再檢查 HKLM

  2. 寫入位置:

    • 若是安裝程式(Installer)在安裝時填入的資訊(如路徑、共同金鑰),放在 HKLM

    • 若是使用者開啟軟體後,手動輸入序號進行「啟動」,建議放在 HKCU,以避免 UAC 彈窗權限請求。

範例結構

建議在 SOFTWARE 下建立兩層目錄,避免與其他軟體衝突:

HKEY_CURRENT_USER\SOFTWARE\MyCompany\MySystem\LicenseKey


注意事項

  • WOW6432Node 問題: 如果你的系統是 32 位元但執行在 64 位元 Windows 上,系統會自動將 HKLM 的路徑重新導向到 HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\...。在撰寫讀取程式碼時需注意位元組相容性。

  • 敏感資訊加密: 絕對不要直接把明文密碼或重要授權資訊直接存放在登錄檔中。建議至少經過 Base64 或是更嚴謹的 AES 加密,因為任何人都可以開啟 regedit 查看。

dBASE PLUS (dBL) 範例程式碼

在 dBASE 中,你可以使用內建的 Registry 類別來操作:

// 建立 Registry 物件
r = new Registry()

// 設定要訪問的根鍵 (HKLM = -2147483646)
r.root = -2147483646

// 定義路徑
cKey = “SOFTWARE\\dBASE\\PLUS\\series1”

// 讀取一個值 (例如讀取安裝路徑)
if r.openKey(cKey)
cValue = r.getValue(“RuntimePath”)
msgbox(“dBASE 運行路徑是: ” + cValue)
r.closeKey()
else
msgbox(“找不到登錄路徑!”)
endif

// 寫入一個值 (假設你要存入自定義設定)
if r.createKey(“SOFTWARE\\MyCompany\\MySystem”)
r.setValue(“Version”, “2019.1”)
r.closeKey()
endif

個人頭像照片

By 伍 芳左

MIS, ERP Pro...

發佈留言