我的.NET应用程序(any-CPU)需要读取由32位程序创建的注册表值。在64位Windows上,它位于注册表中的Wow6432Node项下。我已经读过,你不应该对Wow6432Node进行硬编码,那么用.NET访问它的正确方法是什么?如何从64位.NET应用程序中打开WOW64注册表项
27
A
回答
12
如果您明确需要读取64位程序中由32位程序写入的值,则可以对其进行硬编码。只是因为没有别的选择。
我当然会将它抽象为一个辅助函数。例如
public RegistryKey GetSoftwareRoot() {
var path = 8 == IntPtr.Size
? @"Software\Wow6432Node"
: @"Software";
return Registry.CurrentUser.OpenSubKey(path);
}
16
正确的方法是调用本机注册表API和传递KEY_WOW64_32KEY
标志RegOpenKeyEx/RegCreateKeyEx
6
扩展安德斯的回答,有一个good example of wrapping the resulting handle in a .NET RegistryKey object on Shahar Prish's blog - 一定要过,虽然阅读注释。
请注意,未使用的the pinvoke.net wrapper of RegOpenKeyEx充满了问题。
52
如果您可以将目标.Net版本更改为v4,那么您可以使用新的OpenBaseKey函数,例如
RegistryKey registryKey;
if (Environment.Is64BitOperatingSystem == true)
{
registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64);
}
else
{
registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32);
}
相关问题
- 1. 从32位应用程序打开64位注册表
- 2. 从32位应用程序访问64位注册表
- 3. 如何从32位进程读取64位注册表项?
- 4. 在32位应用程序中访问64位注册表
- 5. 使用32位安装程序删除64位注册表项
- 6. 如何注册应用程序以打开位置
- 7. C#32位应用程序64位注册表
- 8. 32位应用程序访问64位注册表
- 9. 如何从64位Windows注册表中读取启动项目?
- 10. 如何在Windows 64位检索注册表中的应用程序列表
- 11. 如何为WoW64和x64流程创建共享注册表项
- 12. Vb6应用程序CRUD Windows'注册表32或64位
- 13. 如何在32位应用程序中使用本机Windows API在64位视图中创建注册表项
- 14. 注册表项在Windows 7 64位
- 15. 从32位应用读取64位注册表
- 16. 打开远程注册表子项
- 17. 如何从32位应用程序注册64位DLL(在64位操作系统上)
- 18. 如何从c#应用程序创建注册表项?
- 19. 从Haskell访问64位注册表
- 20. 如何确定注册表项是否被WOW64重定向?
- 21. 如何让我的应用程序访问注册表项,而不管它的32位或64位?
- 22. 从64位应用程序引用.net 1.1程序集
- 23. Windows注册表 - 注册应用程序以打开文件类型
- 24. 如何从XP下的64位注册表中删除?
- 25. 从64位Java应用程序(未找到注册表项)访问32位COM DLL
- 26. 在Wow64节点中未创建Wix安装程序注册表项
- 27. .NET和64位应用程序
- 28. 如何从Appcelerator Android应用程序中打开Facebook相册?
- 29. 从网页打开.NET应用程序
- 30. 如何使用python脚本从注册表中删除一个应用程序的注册表项?
够公平 - 谢谢Jared! – marijne 2009-07-02 14:01:41
警告:MS不支持这种方法(对“Wow6432Node”进行硬编码)。请参阅http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspx – Richard 2009-07-30 17:23:32
-1:此行为在Windows 7/Windows Server 2008 R2中中断,因为它们使用共享注册表键替代:http ://msdn.microsoft.com/en-us/library/aa384253(VS.85).aspx – Powerlord 2009-08-24 13:31:53