regdeletekey возвращающий файл не найден

Я играл с этим и не могу понять, почему функция RegDeleteKey приводит к ошибке «Файл не найден».

Я создал этот тестовый ключ, и он существует. HKLM\Software\test Я также являюсь администратором этого компьютера. ОС Виста 32 битная.

int main()
{
    HKEY hReg;
    LONG oresult;
    LONG dresult;

    oresult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\test", 0, KEY_ALL_ACCESS, &hReg);

    if(oresult == ERROR_SUCCESS)
    {
            cout << "Key opened successfully." << endl;
    }


    dresult = RegDeleteKey(hReg, L"SOFTWARE\\test");
    if(dresult == ERROR_SUCCESS)
    {
        cout << "Key deleted succssfully." << endl;
    }
    else
    {
        if(dresult == ERROR_FILE_NOT_FOUND)
        {
            cout << "Delete failed. Key not found." << endl;
            cout << "\n";
        }
    }

    RegCloseKey(hReg);

    return 0;
}

Результат:

ключ открыт успешно удалить не удалось. ключ не найден.


person Community    schedule 20.08.2009    source источник


Ответы (2)


Согласно странице MSDN, второй параметр является подразделом ключа в hKey:

Имя удаляемого ключа. Это должен быть подраздел ключа, который идентифицирует hKey, но он не может иметь подразделов. Этот параметр не может быть NULL.

Это означает, что ваш код фактически пытается удалить HLKM\SOFTWARE\test\SOFTWARE\test.

Вероятно, вы захотите попробовать что-то вроде:

RegDeleteKey(HKEY_LOCAL_MACHINE, L"SOFTWARE\\test");

Это может пригодиться.

person Matthew Iselin    schedule 20.08.2009

Две вещи, которые нужно проверить на наличие ошибки 2 / «файл не найден»:

  • Убедитесь, что это не «значение» в ключе, а не фактический ключ.

Если вы создаете папку типа HKCU > Software > CompanyName, а затем сохраняете значение, подобное option = "foo" с помощью RegSetValueEx, вам необходимо удалить его с помощью RegDeleteValue или RegDeleteValueEx.

  • Если это 64-разрядная ОС, существуют отдельные представления реестра для 32-разрядной и 64-разрядной версии. По умолчанию 32-битное приложение будет использовать 32-битное представление для всего, но если вы по какой-то причине создали запись, используя KEY_WOW64_64KEY, вам нужно использовать ее при удалении.
person Dave S    schedule 09.05.2013