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

Windows 註冊表操作實戰:枚舉已安裝程式與修改環境變量

     編輯:C++ 入門

Windows 註冊表存儲繫統與應用程式關鍵配置。本文提供兩個完整 C++ 範例:枚舉 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 獲取已安裝程式資訊,以及向系統 PATH 環境變量安全追加路徑。

一、枚舉已安裝程式資訊

關鍵 API:RegOpenKeyEx、RegEnumKeyEx、RegQueryValueEx。遍歷子鍵,讀取 DisplayName、Publisher、DisplayVersion、InstallLocation 等值。

// 核心邏輯片段
HKEY hUninstallKey;
RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", 0, KEY_READ, &hUninstallKey);

DWORD idx = 0, nameLen = 256;
char subKeyName[256];
while (RegEnumKeyExA(hUninstallKey, idx++, subKeyName, &nameLen, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
    HKEY hAppKey;
    if (RegOpenKeyExA(hUninstallKey, subKeyName, 0, KEY_READ, &hAppKey) == ERROR_SUCCESS) {
        // 讀取各字段...
        RegCloseKey(hAppKey);
    }
    nameLen = 256;
}
RegCloseKey(hUninstallKey);

二、向系統 PATH 追加路徑

目標鍵:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment,值名 Path,類型 REG_EXPAND_SZ。
步驟:

  1. 打開鍵並讀取現有 Path 值(需兩次調用 RegQueryValueEx:第一次獲取大小,第二次讀取數據)。
  2. 檢查是否已包含目標路徑(避免重複)。
  3. 拼接新字符串(以分號分隔),調用 RegSetValueEx 寫回。
  4. 廣播 WM_SETTINGCHANGE 通知系統環境變量更新(代碼中省略,實際部署需補充)。
// 關鍵寫入邏輯
LONG ret = RegSetValueExA(hKey, "Path", 0, REG_EXPAND_SZ,
                          (const BYTE*)newPathStr, (DWORD)strlen(newPathStr) + 1);
if (ret != ERROR_SUCCESS) { /* 處理錯誤 */ }

注意事項

  • 操作 HKLM 需管理員權限(UAC 提升)。
  • 註冊表字符串讀寫需處理 ERROR_MORE_DATA、ERROR_FILE_NOT_FOUND 等返回碼。
  • 修改系統環境變量後,現有進程不會自動感知,需重啟進程或發送 WM_SETTINGCHANGE。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved