RegQueryValue读取键值返回2号异常
RegQueryValue读取键值返回2号错误
先出代码
调用代码
RegKey = "HKEY_CLASSES_ROOT\CLSID\{AD04E3AB-F7B8-4F06-AC4A-D4901324CBAA}"
问题读取 L"" 这个时可以正确,可是读取 L"InfoTip" 就返回错误为2。这是为什么啊。请大神指点啊。
------解决方案--------------------
KEY_ALL_ACCESS
换成
KEY_EXECUTE
看看
------解决方案--------------------
2 The system cannot find the file specified. ERROR_FILE_NOT_FOUND
------解决方案--------------------
改成KEY_QUERY_VALUE就行了,你申请的权限太大
先出代码
- C/C++ code
/******************************************************************** 函数名称: ReadRegString 功能说明: 读取注册表一个字段 ========================================= 参数说明: HKEY hKey 主键值 参数说明: LPCTSTR szSubKey 子路径 参数说明: LPCTSTR szKeyName 子名称 --------------------------------- 返回类型: CString 返回文本型 --------------------------------- 文件作者: King.Sollyu *********************************************************************/ CString ReadRegString(HKEY hKey,LPCTSTR szSubKey,LPCTSTR szKeyName) { HKEY hKeyHander = NULL ; int nRet = RegOpenKeyEx(hKey,szSubKey,NULL,KEY_ALL_ACCESS,&hKeyHander); if ( nRet != ERROR_SUCCESS) { CString str; str.Format(L"打开注册表 %s 表值错误",szSubKey); ShowError(str,nRet); return L""; } TCHAR szData[1000]; LONG dwSize = 1000 ; if ((nRet = RegQueryValue(hKeyHander,szKeyName,szData,&dwSize)) != ERROR_SUCCESS) { CString str; str.Format(L"读取注册表 %s 表值错误",szKeyName); ShowError(str,nRet); return L""; } RegCloseKey(hKeyHander); CString strRet(szData); return strRet; }
调用代码
- C/C++ code
CString strSubKeyPath = L"" , strKeyName = RegKey[dwIndex].strKeyName; strSubKeyPath.Format(L"CLSID\\%s",strKeyName); RegKey[dwIndex].keyInfo.strKeyName = ReadRegString(HKEY_CLASSES_ROOT,strSubKeyPath,L""); RegKey[dwIndex].keyInfo.strInfoTip = ReadRegString(HKEY_CLASSES_ROOT,strSubKeyPath,L"InfoTip");
RegKey = "HKEY_CLASSES_ROOT\CLSID\{AD04E3AB-F7B8-4F06-AC4A-D4901324CBAA}"
问题读取 L"" 这个时可以正确,可是读取 L"InfoTip" 就返回错误为2。这是为什么啊。请大神指点啊。
------解决方案--------------------
KEY_ALL_ACCESS
换成
KEY_EXECUTE
看看
------解决方案--------------------
2 The system cannot find the file specified. ERROR_FILE_NOT_FOUND
------解决方案--------------------
改成KEY_QUERY_VALUE就行了,你申请的权限太大
- C/C++ code
DWORD TestReadkey(__out LPWSTR lpData,__in HKEY hPreKey,__in LPCWSTR lpKeyName,__in LPCWSTR lpValueName,__in DWORD dwDataLen) { DWORD dwRetCode = 0; HKEY hKey = NULL; __try { dwRetCode = RegOpenKeyExW(hPreKey, lpKeyName, 0, KEY_WOW64_32KEY|KEY_QUERY_VALUE,&hKey); if (ERROR_SUCCESS != dwRetCode) { SetLastError(dwRetCode); DisplayErrorW(__FUNCTIONW__,L"RegOpenKeyEx",dwRetCode); __leave; } dwRetCode = RegQueryValueExW(hKey,lpValueName,NULL,NULL,(LPBYTE)lpData,&dwDataLen); if (ERROR_SUCCESS != dwRetCode) { SetLastError(dwRetCode); DisplayErrorW(__FUNCTIONW__,L"RegQueryValueEx",dwRetCode); __leave; } } __finally { if (NULL != hKey) { RegCloseKey(hKey); hKey = NULL; } } return dwRetCode; }