Чтение значения реестра в Windows с помощью QSettings - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь прочитать MachineGuid ключ из реестра Windows, используя QSettings .

Адрес этого ключа

"HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography".

Я использую QSettings с флагом QSettings :: Native следующим образом.

QSettings settings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography",QSettings::NativeFormat);

Я вижу все подпапки и их ключи, а также значение MachineGuid из regedit.exe , но функция значение QSettings не похоже, работает правильно.

Результаты выглядят следующим образом:

settings.value("MachineGuid").toString();

возвращает пустую строку QString.

settings.childGroups();

возвращает все подпапки папки Cryptography правильно.

settings.childKeys();

возвращает пустой QStringList

settings.allKeys();

возвращает все ключи в папке Cryptography, включая ключи во всех подпапках, кроме MachineGuid, который находится внутри Cryptography.

Я использую Qt 5.7.1, построенную статически с использованием Visual Studio 2015 в Windows 10.

Я пробовал коды, которые используют заголовок Window.h , и я успешно извлек это значение, но проблема с этим подходом заключается в том, что мне нужно добавить много DLL в мое выпущенное программное обеспечение.

1 Ответ

0 голосов
/ 05 мая 2018

Для доступа к 64-битной ОС Windows с 32-битным скомпилированным кодом правильным форматом будет «Registry64Format», а при доступе к 32-битной ОС из 64-компилятора правильным форматом будет «Registry32Format». Таким образом, в моем случае, после установки формата в 64 бит, ключ может быть выбран.

для чтения ключа "MachineGuid" в 64-битной ОС с 32-битным скомпилированным кодом;

QSettings settings("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography",
QSettings::Registry64Format);
auto key = settings.childKeys().at(0);
...