2016-11-10 63 views
0

的返回值我想EXCEL.EXE从注册表的路径。所以我用了以下内容:用的RegQueryValueEx奇怪的行为whitch另一个寄存器

我使用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) 

所以建立我的解决方案的平台的时候,我得到的路径

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

这是精细,但是建立我的的Win32平台解决方案时,我得到 以下路径

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

这就是奇怪因为这个值是st在以下注册表

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{ExcelCLSID}\ 

我错过了什么吗?

回答

1

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

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

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

+0

我认为这个问题是在指定所需的访问权限的密钥掩码运行32位的过程中,我应该使用时从windows64bits登记读到如此打开KEY_READ ** | ** KEY_WOW64_64KEY而不是使用** KEY_READ **仅在RegOpenKeyEx的调用中。 – Deli