以下C++/CLI代码将nullptr返回给pKey.
RegistryKey^ pKey = Microsoft::Win32::Registry::LocalMachine->OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\Folders");
Run Code Online (Sandbox Code Playgroud)
下面的C#代码返回一个指向pKey的有效指针.
RegistryKey pKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\Folders");
Run Code Online (Sandbox Code Playgroud)
除了语言差异外,这两个代码片段看起来与我完全相同.
我只是想通过在x64中构建C++代码可以找到密钥.所以我现在的问题是如何在32位版本中找到密钥?我需要在两个版本中找到它.
谢谢.
毫无疑问,这是平台目标的副作用.在64位操作系统上,HKLM/Software密钥被重定向到32位进程到HKLM/Software/Wow6432Node.您要查找的特定密钥不存在的位置.
因此,C#代码的工作原理很好,因为它以AnyCPU为目标,因此以64位模式运行.并且C++/CLI代码不起作用,因为它针对的是Win32.C++/CLI没有AnyCPU模式,您必须在x64和Win32之间进行选择.包含本机代码的C++/CLI程序集的副作用.
在.NET 4中,RegistryKey类获得了一个额外的OpenBaseKey()方法,该方法允许指定注册表视图.早期版本没有简单的解决方法.考虑在C++/CLI项目中添加x64平台.或者使用原生的winapi函数,而不是C++/CLI的优势.
| 归档时间: |
|
| 查看次数: |
1454 次 |
| 最近记录: |