嗨,我正在尝试读取一个注册表值,该值为我提供了firefox.exe的路径。
这存储在

HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 3.0.10\bin

(版本号可以在其他地方找到)

但是我似乎无法让RegOpenKeyEx在任何情况下都返回ERROR_SUCCESS
HKEY_LOCAL_MACHINE

因此此测试失败:
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("\\SOFTWARE"),0,KEY_QUERY_VALUE,&keyHandle) == ERROR_SUCCESS)

当此测试通过时:
if(RegOpenKeyEx(HKEY_CLASSES_ROOT,TEXT("\\Shell"),0,KEY_QUERY_VALUE,&keyHandle) == ERROR_SUCCESS)

最佳答案

以下代码在我的计算机上失败,错误代码为161,表示“错误路径”(在winerror.h中查找):

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

然后,我将对RegOpenKeyEx的调用更改为使用“SOFTWARE”(请注意,不要使用斜杠),并且可以正常工作:
#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;
    }
}

10-04 12:08