c++ - 为什么 RegOpenKeyEx 让我打开注册表编辑器中不存在的 key ?

标签 c++ windows-7 registry regedit

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

现在,当我在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0 中检查 regedit.exe 时,我没有在树中看到 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"

最佳答案

如果您在 64 位系统上运行受 Registry Redirection 影响的 32 位应用程序,就会发生您所描述的情况。或 Registry Virtualization .如果你的 VC++ 应用程序是 32 位的,而你运行的是 64 位版本的 regedit,或者你的应用程序是 64 位的,而你运行的是 32 位版本的 regedit,那么它们将有效地查看/操作不同的区域登记处。这可以解释为什么他们看不到彼此的数据。

关于c++ - 为什么 RegOpenKeyEx 让我打开注册表编辑器中不存在的 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14877691/

相关文章:

c++ - ShellExecute(和 ShellExecuteEx)对我的 URL 不做任何事情

c++ - 为 TypeList 实现 Loki IndexOf

c++ - 使用g++在linux中运行程序出错

java - 从 Java 程序安装字体

windows - 启用 Windows 命令行历史记录

c# - 结构图 - 覆盖注册

windows - 通过批处理 cmd 重命名/删除注册表中的键

c++ - 检测成员变量的阴影

windows - 在 windows 7 : not getting the autoexec 上安装 behat

java - 如何使用 JNA winreg 写入 Windows 注册表?