2012-11-23 60 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不支持。

相關問題