2009-05-04 31 views
6

Xin chào Tôi đang cố gắng đọc một giá trị sổ đăng ký cung cấp cho tôi đường dẫn đến firefox.exe. này được lưu trữ dướiRegOpenKeyEx không thành công trên HKEY_LOCAL_MACHINE

HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 3.0.10\bin 

(số phiên bản có thể được tìm thấy ở một nơi khác)

Nhưng tôi không thể dường như để có được RegOpenKeyEx trở ERROR_SUCCESS cho bất cứ điều gì dưới

HKEY_LOCAL_MACHINE 

để thử nghiệm này không thành công :

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("\\SOFTWARE"),0,KEY_QUERY_VALUE,&keyHandle) == ERROR_SUCCESS) 

trong khi kiểm tra này vượt qua:

if(RegOpenKeyEx(HKEY_CLASSES_ROOT,TEXT("\\Shell"),0,KEY_QUERY_VALUE,&keyHandle) == ERROR_SUCCESS) 
+0

Giá trị của GetLastError() ngay sau khi RegOpenKeyEx bị lỗi là gì? –

+3

Không kiểm tra GetLastError(), chức năng này không đặt nó. Mã lỗi nằm trong giá trị trả về, do đó, gán nó cho một biến. – Joshua

Trả lời

18

Các mã sau thất bại trên máy tính của tôi với các mã lỗi 161, có nghĩa là "con đường xấu" (nhìn nó trong winerror.h):

long n = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE"), 
         0,KEY_QUERY_VALUE, &hk); 

sau đó tôi đã thay đổi cuộc gọi đến RegOpenKeyEx để sử dụng "PHẦN MỀM" (lưu ý không có dấu gạch chéo hàng đầu) và nó hoạt động:

#include <windows.h> 
#include <iostream> 
using namespace std; 

int main() { 
    HKEY hk; 

    // Notice that it's SOFTWARE instead of \\SOFTWARE: 
    long n = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE"), 
         0,KEY_QUERY_VALUE, &hk); 
    if (n == ERROR_SUCCESS) { 
     cout << "OK" << endl; 
    } 
    else { 
     cout << "Failed with value " << n << endl; 
    } 
} 
+1

Thx, đó là nó! Tôi nghĩ rằng nó có thể được gây ra bởi PHẦN MỀM đó được lưu trong một tập tin riêng biệt (có thông tin này từ wikipedia mặc dù), và không phải là một thư mục như Shell là trong HKEY_CLASSES_ROOT –

Các vấn đề liên quan