我正在寻找一种干净的方法来检查是否存在注册表项.我曾经假设如果我试图打开一个不存在的密钥,RegOpenKey会失败,但事实并非如此.
我可以使用字符串处理来查找并打开我正在寻找的那个的父键,然后枚举该键的子键以查明我感兴趣的那个是否存在,但这感觉就像一个性能猪和一种奇怪的方式来实现这样一个简单的功能.
我猜你可以用某种方式使用RegQueryInfoKey,但MSDN并没有提供太多关于如何实现的细节,即使它是可能的.
更新:我需要Win32 api中的解决方案,而不是托管代码,.NET或任何其他库.
MSDN中的文档似乎表明您应该能够打开一个读取权限的密钥,如果它不存在则会收到错误,如下所示:
lResult = RegOpenKeyEx (hKeyRoot,lpSubKey,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(),&subKey); if (result != ERROR_SUCCESS) {
…但结果是ERROR_SUCCESS,即使我正在尝试打开一个不存在的密钥.
更新3:看起来你们是对的.这在一个特定的测试示例(神秘地)上失败了.如果我在任何其他键上尝试它,它将返回正确的结果.使用注册表编辑器仔细检查它仍然不显示密钥.不知道该怎么做.