Я ищу чистый способ проверить, существует ли раздел реестра. Я предполагал, что RegOpenKey
потерпит неудачу, если я попытаюсь открыть ключ, который не существует, но это не так.
Я мог бы использовать обработку строк, чтобы найти и открыть родительский ключ того, который я ищу, и затем перечислить подключи этого ключа, чтобы выяснить, существует ли тот, который мне интересен, но это похоже на оба снижение производительности и странный способ реализовать такую простую функцию.
Я бы предположил, что вы могли бы как-то использовать RegQueryInfoKey
, но MSDN не дает слишком много подробностей о том, как, даже если это возможно.
Обновление : мне нужно решение в Win32 API, а не в управляемом коде, .NET или любой другой библиотеке.
Документы в MSDN, по-видимому, указывают на то, что вы должны иметь возможность открыть ключ для разрешения на чтение и получить ошибку, если она не существует, например:
lResult = RegOpenKeyEx (hKeyRoot, lpSubKey, 0, KEY_READ, &hKey);
if (lResult != ERROR_SUCCESS)
{
if (lResult == ERROR_FILE_NOT_FOUND) {
Однако я получаю ERROR_SUCCESS
, когда пытаюсь это сделать.
Обновление 2 : мой точный код:
HKEY subKey = nullptr;
LONG result = RegOpenKeyEx(key, subPath.c_str(), 0, KEY_READ, &subKey);
if (result != ERROR_SUCCESS) {
... но result
- это ERROR_SUCCESS
, хотя я пытаюсь открыть ключ, который не существует.
Обновление 3 : Похоже, вы правы, ребята. Это терпит неудачу на одном конкретном тестовом примере (загадочно). Если я попробую его на любом другом ключе, он вернет правильный результат. Двойная проверка с помощью редактора реестра по-прежнему не показывает ключ. Не знаю, что с этим делать.