Почему RegOpenKeyEx позволяет мне открывать ключ, который не существует в редакторе реестра?

В Microsoft Visual C ++ у меня есть следующий кусок кода для доступа к пути в реестре. Затем я прочитал значение ключа Installed с RegQueryValueEx, Пока все хорошо, ценность, кажется, 1, что соответствует наличию среды выполнения Visual C ++ 2010 в моей системе. (это кусок кода для обнаружения присутствия среды выполнения c ++).

Теперь, когда я проверяю с regedit.exe в HKEY_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"

2

Решение

То, что вы описываете, происходит, если вы работаете в 64-битной системе с 32-битным приложением, на которое влияют Перенаправление реестра или же Виртуализация реестра. Если ваше приложение VC ++ 32-битное, и вы используете 64-битную версию regedit, или ваше приложение 64-битное, и вы используете 32-битную версию regedit, то они будут эффективно просматривать / манипулировать различными областями Реестр. Это объясняет, почему они не видят данные друг друга.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]