似乎顺序对从注册表中读取一些键很重要,这让我感到惊讶。我fake_entry
通过创建如下所示Regedit
。
当我fake_entry
在致电后立即阅读时RegOpenKeyEx()
,它可以工作。如果我在 my 之前阅读任何其他内容fake_entry
,则阅读fake_entry
失败。
失败的例子:
openResult=RegOpenKeyEx( HKEY_LOCAL_MACHINE, _TEXT("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full"), 0, KEY_READ|KEY_WOW64_64KEY, &root);
readResult1=RegQueryValueEx(root, _TEXT("InstallPath"), NULL, NULL, data1, &size);
readResult2=RegQueryValueEx(root, _TEXT("fake_entry"), NULL, NULL, data2, &size);
在上面,InstallPath
读取工作并且fake_entry
读取失败并出现“错误 2,ERROR_FILE_NOT_FOUND
”。
有效的例子:
openResult=RegOpenKeyEx( HKEY_LOCAL_MACHINE, _TEXT("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full"), 0, KEY_READ|KEY_WOW64_64KEY, &root);
readResult2=RegQueryValueEx(root, _TEXT("fake_entry"), NULL, NULL, data2, &size);
readResult1=RegQueryValueEx(root, _TEXT("InstallPath"), NULL, NULL, data1, &size);
在上面,两种读取都有效。
为什么一个工作,另一个失败?真的可以订吗?RegOpenKeyEx()
每次打电话都要打电话ReqQueryValueEx()
吗?我在互联网上四处寻找似乎并非如此。
是的,我知道这不是我应该更改的注册表位置。我在学习 KEY_WOW64_64KEY
时偶然发现了这一点,并且很好奇为什么秩序似乎很重要。
在 Visual Studio 2010 中运行 Windows 7、64 位、C++,使用 ASCII 字符编码。