我有一段代碼查找註冊表項。在目前的形式下,它在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
我已經閱讀負載,但沒有明確的答案失敗。我有點急於完成這個任務,所以任何人都可以給我的指針會很受歡迎。
失敗:) –
當您在Windows 7和Windows XP的測試,你的測試相同的二進制的土地?或者,您是在Windows 7上編譯並在Windows XP上進行測試和編譯並進行測試? – hmjd
系統錯誤代碼'2'是'ERROR_FILE_NOT_FOUND'。可能是您的XP系統中不存在此註冊表項? – Lol4t0