c++ - RegQueryValueEx 的奇怪行为会返回另一个寄存器的值

标签 c++ excel windows path registry

我想从注册表中获取 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/

相关文章:

c++ - C++ 中类析构函数的奇怪行为

sql - 将 Excel 电子表格连接到 SQL 数据库

Windows shell 字符串操作(将反斜杠改为斜杠)

linux - 为什么关闭死掉的tcp-socket会影响另一个打开的tcp套接字?

C++:设计包含许多容器的类的接口(interface)

c++ - 共享指针 [] 运算符和++ 运算符

c++ - 使用 volatile long 作为原子

vba - 在 VBA 完成执行之前,Power Query 表不会下载数据

php - 使用php将数据输出到excel电子表格的最佳方法是什么

c++ - 为什么 COM 在新线程中不起作用?