HKEY_LOCAL_MACHINE上的RegOpenKeyEx失败

Emi*_*ags 6 c++ registry winapi

嗨,我正在尝试读取一个注册表值,它给我firefox.exe的路径.这存储在

HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 3.0.10\bin
Run Code Online (Sandbox Code Playgroud)

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

但我似乎无法让RegOpenKeyEx返回ERROR_SUCCESS

HKEY_LOCAL_MACHINE
Run Code Online (Sandbox Code Playgroud)

所以这个测试失败了:

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("\\SOFTWARE"),0,KEY_QUERY_VALUE,&keyHandle) == ERROR_SUCCESS)
Run Code Online (Sandbox Code Playgroud)

而这个测试通过:

if(RegOpenKeyEx(HKEY_CLASSES_ROOT,TEXT("\\Shell"),0,KEY_QUERY_VALUE,&keyHandle) == ERROR_SUCCESS)
Run Code Online (Sandbox Code Playgroud)

小智 18

我的机器上的以下代码失败,错误代码为161,这意味着"错误的路径"(在winerror.h中查找):

long n = RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SOFTWARE"),
                      0,KEY_QUERY_VALUE, &hk );
Run Code Online (Sandbox Code Playgroud)

然后我将调用更改为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;
    }
}
Run Code Online (Sandbox Code Playgroud)