環境:64位操作系統, VS2017
首先在命令行執行
REG ADD HKLM\Software\seastarsun /v serial /t REG_SZ /d 58ae4cb077a4e1
在注冊表查看,已存在鍵值。
但通過C++讀取該值,一致返回錯誤碼 2,ERROR_FILE_NOT_FOUND。
同時試驗 其他同目錄下其他鍵值,是可以正確返回結果的。
string GetRegStr(string name, char* base)//得到name的字串值s, result必須先初始化
{
HKEY hResult;
char result[256]; strcpy_s(result, ""); LSTATUS status = RegOpenKey(HKEY_LOCAL_MACHINE, base, &hResult); if (ERROR_SUCCESS != status) { cout << status << endl; return "error"; } DWORD dwcount = 255; RegQueryValueEx(hResult, name.c_str(), 0, 0, (BYTE*)&result[0], &dwcount); RegCloseKey(hResult); cout<< result<<endl; return string(result); } string get_serial_reg() { //讀取string類型 //* char lpSubKey[] = "SOFTWARE\\Seastarsun"; return GetRegStr("Serial", lpSubKey); //*/ /* char lpSubKey[] = "SOFTWARE\\7-zip"; return GetRegStr("Path", lpSubKey); //*/ }
上網查了N久,終於找到 一篇文章,介紹了64位操作系統注冊表重定向的信息。
受 http://www.bathome.net/thread-30783-1-1.html。文章啟發,WOW6432Node 目錄下加入鍵值,
在 REG ADD HKLM\Software\WOW6432Node\seastarsun /v serial /t REG_SZ /d 58ae4cb077a4e1
重新使用上述函數查看,可以正確返回結果了。
又查看了WOW6432Node 目錄下也包含7-zip,修改了WOW6432Node\7-zip的值,返回的也是修改后的。
原來C++ 讀取注冊表的時候被重定向了。