为什么RegOpenKeyEx让我打开注册表编辑器中不存在的密钥?

时间:2013-02-14 15:00:53

标签: c++ windows-7 registry regedit

在Microsoft Visual C ++中,我有以下代码来访问注册表中的路径。然后,我使用Installed读取密钥RegQueryValueEx的值。到目前为止,这个值似乎很1,这与我系统上Visual C ++ 2010运行时的存在相对应。 (它恰好是检测c ++运行时存在的一段代码)。

现在当我在regedit.exeHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0核对时,我在树中看不到VC

这怎么可能?我在这个问题中复制/粘贴了所有路径和代码,所以它们必须是正确的。

C ++应用程序中的代码:

HKEY RegistryKey;
DWORD ErrorCode;
DWORD RegDwordValue = 0;
DWORD RegDwordValueSize = sizeof(DWORD);
if((ErrorCode = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
                "SOFTWARE\\Microsoft\\VisualStudio\\10.0\\VC\\VCRedist\\x86",
                0, //Reserved
                KEY_READ,
                &RegistryKey)) != ERROR_SUCCESS)
{
    //Either the key does not exists, or registry access is denied. Anyway, detection did not succeed
    std::cout << "Could not read registry path:\n\t" << lpcRegistryPath << "\n\tError code: " << ErrorCode;
    return false;
}
if((ErrorCode = RegQueryValueEx(    RegistryKey,
                                    lpcValueToQuery,
                                    NULL,
                                    NULL,
                                    (LPBYTE)&RegDwordValue,
                                    &RegDwordValueSize
                                    )) != ERROR_SUCCESS)
{
    std::cout << "Could not read registry value, error " << ErrorCode;
    return false;
}

编辑:我已在下面添加了注册表导出

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Debugger]
"FEQARuntimeImplDll"="C:\\Program Files\\Microsoft Visual Studio 10.0\\Common7\\Packages\\Debugger\\X64\\Microsoft.VisualStudio.Debugger.Runtime.Impl.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Packages]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Packages\{4A0C6509-BF90-43DA-ABEE-0ABA3A8527F1}]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Packages\{4A0C6509-BF90-43DA-ABEE-0ABA3A8527F1}\Settings]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Packages\{4A0C6509-BF90-43DA-ABEE-0ABA3A8527F1}\Settings\Tools]

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0\Packages\{4A0C6509-BF90-43DA-ABEE-0ABA3A8527F1}\Settings\Tools\SSISScript]
"ScriptLanguage"="CSharp"

1 个答案:

答案 0 :(得分:5)

如果您使用的是运行受Registry RedirectionRegistry Virtualization影响的32位应用的64位系统,则会描述您所描述的内容。如果您的VC ++应用程序是32位并且您运行的是64位版本的regedit,或者您的应用程序是64位且您运行的是32位版本的regedit,那么它们将有效地查看/操作不同的书记官处。这可以解释为什么他们没有看到对方的数据。