2012-11-23 61 views
1

我有一段代码查找注册表项。在目前的形式下,它在Vista和7上运行良好,但是它在XP上返回错误代码2或87。RegOpenKeyEx仅在Windows XP上失败

当前代码(在更大的工作比XP):

dwRet = RegOpenKeyEx(hKeyUsed, strRegCheck, 0, KEY_READ, &hKey) ; 

if (dwRet == ERROR_SUCCESS) 
{ 
    dwRet = RegQueryValueEx(hKey, strRegValue, NULL, NULL, (LPBYTE) PerfData, &cbData); 

    while (dwRet == ERROR_MORE_DATA) 
    { 
     // Get a buffer that is big enough. 
     BufferSize += BYTEINCREMENT; 
     PerfData = (PPERF_DATA_BLOCK) realloc(PerfData, BufferSize); 
     cbData = BufferSize; 
     dwRet = RegQueryValueEx(hKey, NULL, NULL, NULL, (LPBYTE) PerfData, &cbData); 
    } 
    if (dwRet == ERROR_SUCCESS) 
    { 
     strSourcePath = PerfData->Signature; 
     return true; 
    } 
} 

这是这似乎是这个问题的第一线,并且这是造成它的第二个参数。下面是它的MSDN文档:http://msdn.microsoft.com/en-gb/library/windows/desktop/ms724897(v=vs.85).aspx

strRegCheck是类型的CString的。如果在Windows XP上,我改变这个为

const LPCWSTR sKey = _T("CLSID\\{2933BF90-7B36-11D2-B20E-00C04F983E60}\\VersionList"); 

并明显改变'sKey'的第二个参数,然后我们再次工作。

如果我设置SKEY是:

const LPCTSTR sKey = strRegCheck.GetBuffer(strRegCheck.GetLength()); 

然后我回失败的土地。有趣的是,如果我在同一时间打开RegEdit,并且拥有搜索打开的密钥,那么它不会失败。此外,我要么错误2或这种其它线程的87

我已经阅读负载,但没有明确的答案失败。我有点急于完成这个任务,所以任何人都可以给我的指针会很受欢迎。

+0

失败:) –

+0

当您在Windows 7和Windows XP的测试,你的测试相同的二进制的土地?或者,您是在Windows 7上编译并在Windows XP上进行测试和编译并进行测试? – hmjd

+0

系统错误代码'2'是'ERROR_FILE_NOT_FOUND'。可能是您的XP系统中不存在此注册表项? – Lol4t0

回答

0

我发现变量已经逃过了反斜杠。这些字符串是从文本文件读入的。我替换了单个的双反斜杠,它的工作原理。即使如此,有谁能向我解释为什么这是因为我想更好地理解。我很想知道Vista和7的工作方式,但XP不支持。

相关问题