RegQueryValueEx的奇怪行为whitch返回另一个寄存器的值

时间:2016-11-10 21:05:19

标签: c++ excel windows path registry

我想从注册表中找到Excel.exe的路径。所以我使用了以下内容:

我正在使用Windows64bits

 RegOpenKeyEx(HKEY_LOCAL_MACHINE, szKey, 0, KEY_READ, &hKey)

szKey = "\Classes\CLSID\{ExcelCLSID}\LocalServer",

此寄存器包含“C:\ PROGRA~1 \ MIF5BA~1 \ Office15 \ EXCEL.EXE / automation”

用于获取Excel.exe路径

RegQueryValueEx(hKey, NULL, NULL, NULL, (BYTE*)szPath, &cSize)

因此,在构建我的平台 x64 的解决方案时,我得到路径

C:\\PROGRA~1\\MIF5BA~1\\Office15\\EXCEL.EXE /automation

很好,但在构建 Win32 平台的解决方案时,我得到了 以下路径

"C:\\Program Files\\Microsoft Office\\Office15\\EXCEL.EXE" /automation

奇怪,因为此值存储在以下注册表中

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{ExcelCLSID}\
我在这里错过了一些东西吗?

1 个答案:

答案 0 :(得分:1)

Windows注册表或多或少透明地维护在同一环境中运行的32位和64位应用程序的不同信息。您看到的Wow6432Node表示该密钥的值特定于在64位版本的Windows上运行的32位应用程序。

您可以禁用默认注册表重定向(请参阅RegDisableReflectionKey),但在大多数情况下,这不是您想要执行的操作。

请参阅有关注册表重定向的信息here