Windows 的登錄編輯程式 (Registry Editor) 就像是作業系統的「大腦資料庫」,儲存了硬體、軟體及使用者設定的所有細節。
這五個以 HKEY 開頭的目錄稱為「根鍵 (Root Keys)」,各有不同的分工。以下為你詳細解析:
1. HKEY_CLASSES_ROOT (HKCR)
主要功能:副檔名關聯與 OLE 物件資料。
這個部分決定了當你點擊一個檔案時,系統要用哪個程式開啟。
-
儲存內容: 檔案副檔名(如 .txt, .pdf, .mp4)與應用程式的對應關係,以及 COM 元件的註冊資訊。
-
小知識: 它其實是
HKEY_LOCAL_MACHINE\Software\Classes和HKEY_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 帳號登入,該使用者會看到「未註冊」狀態。
開發建議:最佳實踐做法
現在多數開發者會採取**「混合式」或「優先權」**的做法:
-
讀取順序: 程式啟動時,先檢查 HKCU,如果沒有,再檢查 HKLM。
-
寫入位置:
-
若是安裝程式(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