【问题标题】:Strange behaviour with RegQueryValueEx whitch return value of another registerRegQueryValueEx 的奇怪行为与另一个寄存器的返回值有关
【发布时间】:2016-11-10 21:05:19
【问题描述】:

我想从注册表中获取 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 构建我的解决方案时,我得到了路径

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}\

我错过了什么吗?

【问题讨论】:

    标签: c++ excel windows path registry


    【解决方案1】:

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

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

    查看注册表重定向信息here

    【讨论】:

    • 我认为问题出在指定要打开的密钥的所需访问权限的掩码中,因此在运行 32 位进程时从 windows64 位注册表读取我应该使用 KEY_READ |KEY_WOW64_64KEY 而不是只在 RegOpenKeyEx 的调用中使用 KEY_READ
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    相关资源
    最近更新 更多