2014-04-27 247 views
-2

我有下面的代碼,試圖讓程序在啓動時運行:GetLastError()返回「ERROR_NO_MORE_FILES」(18)試圖創建一個註冊表項後

HKEY key; 
    if(RegOpenKey(HKEY_CURRENT_USER,LPCWSTR("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),&key) != ERROR_SUCCESS) { 
     std::cout<<"Unable to open Reg key last error - "<<GetLastError()<<"\n"; 
     system("pause"); 
    } 

忽略不屬於零部件必要。它打印出創建註冊表項時出現錯誤,錯誤代碼爲18,根據this page表示我遇到一個返回ERROR_NO_MORE_FILES的錯誤。不幸的是,描述中提到了同樣的事情,我不知道在創建註冊表項時這意味着什麼。我曾嘗試以管理員身份運行該程序,密鑰也不存在。謝謝。

回答

4

如果你讀了documentation,它指出:

返回值

「如果函數成功,返回值是ERROR_SUCCESS 如果函數調用失敗,返回值是非零錯誤代碼。在Winerror.h中定義您可以使用FormatMessage函數和FORMAT_MESSAGE_FROM_SYSTEM標誌來獲取錯誤的通用描述。

它沒有聲明調用GetLastError()。另外,這與C++無關。

+0

1)這與C++有關,不知道你是否閱讀OP'回合。 2)泛型gescription與枚舉值相同,只是沒有下劃線,如我發佈的鏈接中所解釋的。沒有那麼有用。 – user3577456

1

您的錯誤檢查是錯誤的。註冊表API函數返回錯誤代碼。他們不使用SetLastError。您必須使用函數返回的錯誤代碼來診斷錯誤。

代碼中的明顯錯誤是將其轉換爲寬文本。這並不改變你的字符串實際上是8位文本的事實。使用前綴L

L"Software\\Microsoft\\Windows\\CurrentVersion\\Run" 

對於什麼是值得的,你應該使用RegOpenKeyEx打開鑰匙,而不是RegOpenKey。並用於創建密鑰使用RegCreateKeyEx

0

我有同樣的結果,試圖調用RegCreateKeyEx()在哪裏運行過程中有足夠的權限,註冊表項(在我的情況「HKLM \系統\ CurrentControlSet \服務\事件日誌\應用程序」)時(GetLastError()返回ERROR_NO_MORE_FILES)。 以高級特權啓動進程時,它成功。

所以也許可能有錯誤代碼18和UAC之間的連接。