2016-03-15 108 views
0

我的程序應該枚舉已安裝的OPOS設備。它們在註冊表中列出所以我用RegOpenKeyEx這樣的:RegOpenKeyEx無法找到註冊表項

LONG lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\OLEforRetail\\ServiceOPOS\\PosPrinter"), 0, KEY_READ , &key); 

它工作在我的電腦上很好,但很奇怪的行爲在另一臺機器(Windows 7的SP1 32位)上。

我有兩個幾乎相同的測試項目(兩個都是mfc對話框應用程序,主要區別是一個是用visual studio 2005創建的,另一個是在2010年創建的)。在其中一個項目中,上述代碼正常工作,另一個RegOpenKeyEx返回ERROR_FILE_NOT_FOUND。此外,該鍵無法在regedit.exe中找到。

這裏甚至發生了什麼?

+0

它可能是[註冊表虛擬化](https://msdn.microsoft.com/en-us/library/windows/desktop/aa965884(v = vs.85).aspx)問題?另一方面,如果註冊表__和___你的程序找不到密鑰,可能是因爲密鑰不存在。 –

回答

1

此外,該鍵不能用regedit.exe找到。

那麼,您需要確保您訪問註冊表的位置正確。在64位操作系統上,「regedit.exe」將打開64位視圖,而不是32位。您需要使用Windows\syswow64\regedit.exe來打開32位視圖。

無法打開32位以及64位REGEDIT.EXE,在同一時間。

對於您的程序,您需要檢查它是否是32位或64位。你還需要檢查你是否有權限(檢查鏈接器中的UAC標誌)。

一旦你掌握了這一切,就可以繼續啓用或禁用註冊表重定向,以便32位進程可以訪問64位註冊表,或者64位可以打開32位註冊表視圖。

+0

根據問題,它無法工作的機器是32位機器,所以我不認爲是問題所在。 –