我想从注册表中获取 Excel.exe 的路径。所以我使用了以下内容:
我使用的是 Windows64 位系统
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 构建我的解决方案时,我得到了 as 路径
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}\
我在这里遗漏了什么吗?
最佳答案
Windows 注册表或多或少透明地维护在同一环境中运行的 32 位和 64 位应用程序的不同信息。您看到的 Wow6432Node
表示该键的值特定于在 64 位版本的 Windows 上运行的 32 位应用程序。
您可以禁用默认注册表重定向(请参阅 RegDisableReflectionKey ),但在大多数情况下,这不是您想要做的。
查看注册表重定向信息here .
关于c++ - RegQueryValueEx 的奇怪行为会返回另一个寄存器的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40536988/