2011-05-01 40 views
0

我寫了一些基本代碼來從註冊表中讀取RegGetValue,它在調試模式下工作正常。但是,在發佈模式下,它無法讀取註冊表值。沒有任何錯誤,它只是不起作用。我能做些什麼來使這個功能在發佈模式下工作? (Windows 7 x64,VS 2008)vs2008中Debug Debug模式的幫助

DWORD sz, regval=0; 
RegCreateKeyEx(
    HKEY_CURRENT_USER, 
    _T("Software\\App"), 
    0, 
    NULL, 
    REG_OPTION_NON_VOLATILE, 
    KEY_ALL_ACCESS, 
    NULL, 
    NULL, 
    &sz); 
RegGetValue(
    HKEY_CURRENT_USER, 
    _T("Software\\App"), 
    _T("Value"), 
    RRF_RT_ANY, 
    NULL, 
    &regval, 
    &sz); 
+1

發佈您的代碼。 – 2011-05-01 20:13:54

+0

DWORD sz,regval = 0; RegCreateKeyEx(HKEY_CURRENT_USER,_T( 「軟件\\應用程序」),0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,NULL, \t \t RegGetValue(HKEY_CURRENT_USER,_T( 「軟件\\應用程序」),_ T( 「值」 ),RRF_RT_ANY,NULL,&REGVAL, – IMGRSHPR 2011-05-01 20:21:47

+0

在你的問題。沒有線索如何工作不再是一個合理的藉口。 – 2011-05-01 20:49:55

回答

0

定義此代碼在調試模式下「工作正常」的方式。

此代碼添加一個鍵,然後讀取它下面的值,但沒有添加值的代碼。

如果這是完整的代碼,那麼在嘗試讀取它之前,您需要添加一個名爲「Value」的值。請參閱RegSetValueEx瞭解如何操作。

看起來上面的代碼不會正確地檢索該值,因爲必須在輸入上設置sz以指示緩衝區有多大。很難說沒有完整的代碼,但因爲這個值是REG_DWORD,這將是sz = sizeof(DWORD);,例如。

+0

好吧,對我的問題的一些澄清我使用RegQueryValueEx來讀取現有的註冊表項(REG_DWORD)該函數返回成功,但是緩衝區(LPBYTE lpData)不包含任何數據。此外,包含數據緩衝區值大小(LPDWORD lpcbData)的輸出緩衝區確實給了我數據的大小,這個問題只在釋放模式下,在調試時,它正確地返回緩衝區數據。 – IMGRSHPR 2011-05-02 21:11:19

+0

上面的代碼將無法正確檢索因爲必須在輸入上設置「sz」來指示緩衝區有多大。很難說沒有完整的代碼,但由於這個值是REG_DWORD,這將是'sz = sizeof(DWORD);',例如。 – 2011-05-02 22:15:50

+0

Thanx!這是問題所在。 sz未初始化,剛創建。我認爲它在調試模式下工作的原因是因爲當創建一個變量(DWORD sz)時,它填充了一個值(而不是0),所以RegQueryValueEx使用sz的默認值。 – IMGRSHPR 2011-05-02 22:29:19