Har*_*a R 17 c++ windows registry 64-bit registry-virtualization
我需要"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{26A24AE4-039D-4CA4-87B4-2F86416024FF}"在c ++中打开一个注册表项.它包含java 64位应用程序.该注册表项的完整路径是"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{26A24AE4-039D-4CA4-87B4-2F86416024FF}".
我们可以通过regedit查看此路径.我用
returnStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{26A24AE4-039D-4CA4-87B4-2F86416024FF}"),
0, KEY_ALL_ACCESS, &hKey)
Run Code Online (Sandbox Code Playgroud)
打开注册表; 但它返回错误值(2).
returnStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall")...
Run Code Online (Sandbox Code Playgroud)
返回成功结果.我能做什么?
Adr*_*tti 29
32位和64个应用程序的注册表项是分开的,您无法从32位应用程序(直接)访问64位注册表.在您的情况下,注册表的32位部分中不存在所需的配置单元,然后您只能访问父文件夹.
来自MSDN:
在64位Windows上,部分注册表项针对32位应用程序和64位应用程序单独存储,并使用注册表重定向器和注册表反射映射到单独的逻辑注册表视图,因为64位版本的应用程序可能会使用与32位版本不同的注册表项和值.还有一些未重定向或反映的共享注册表项.
您可以阅读MSDN上的列表:受WOW64影响的注册表项.不幸的SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall是没有提到,但它也受到了影响.
解决方案
您需要做的是明确要求 RegOpenKeyEx访问注册表的64位部分.这可以在KEY_WOW64_64KEY您的调用中添加标志(您可以使用64位应用程序访问32位注册表KEY_WOW64_32KEY).请注意,如果您的应用程序必须与您必须管理案例的那个(旧)版本兼容,那么Windows 2000不支持此标志.
有关更多详细信息,请参阅MSDN上的此链接:访问备用注册表视图.
为方便起见,只需更改您的电话:
returnStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{26A24AE4-039D-4CA4-87B4-2F86416024FF}"),
0, KEY_ALL_ACCESS, &hKey);
Run Code Online (Sandbox Code Playgroud)
至:
returnStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{26A24AE4-039D-4CA4-87B4-2F86416024FF}"),
0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hKey);
Run Code Online (Sandbox Code Playgroud)
注意请
注意,您只能通过其路径访问密钥而不使用任何标记HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall.因为Wow6432节点是WOW64使用的虚拟化节点,但是你不应该依赖它,它是稳定的,但它应该被认为是一个可以改变的实现细节.
参考资料
- MSDN上的注册表虚拟化.
- 读者我发现这篇文章的有趣提示:http://poshcode.org/2470,它适用于PowerShell,但它解释了如何从32位应用程序访问WMI数据(相对于64位注册表部分).
Zai*_*mir -4
错误2表示注册表路径不存在。
确保密钥 {26A24AE4-039D-4CA4-87B4-2F86416024FF} 实际上存在于 SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 下
| 归档时间: |
|
| 查看次数: |
14575 次 |
| 最近记录: |