找不到regdeletekey返回文件

时间:2009-08-20 23:25:36

标签: c++ winapi registry

我一直在玩这个,我无法理解为什么RegDeleteKey函数导致文件找不到错误..

我创建了此测试密钥,存在。 HKLM \ SOFTWARE \测试 我也是这台电脑的管理员。操作系统是Vista 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;
}

输出结果为:

键成功打开 删除失败。找不到钥匙。

2 个答案:

答案 0 :(得分:4)

根据MSDN页面,第二个参数是hKey中键的子键:

  

要删除的密钥的名称。它   必须是hKey键的子键   识别,但不能   子项。这个参数不能   NULL。

这意味着您的代码实际上会尝试删除HLKM \ SOFTWARE \ test \ SOFTWARE \ test。

你可能想尝试类似的东西:

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

This可能派上用场。

答案 1 :(得分:0)

检查错误2 /“找不到文件”的两件事:

  • 确保它不是键中的“值”而不是实际键。

如果你创建像HKCU这样的文件夹&gt;软件&gt;在CompanyName然后使用RegSetValueEx存储类似option =“foo”的值,然后您需要使用RegDeleteValue或RegDeleteValueEx删除它。

  • 如果是64位操作系统,则有32位与64位的单独注册表视图。默认情况下,32位应用程序将使用32位视图,但如果您出于某种原因使用KEY_WOW64_64KEY创建了该条目,则需要在删除时使用该条目。