C#访问64位注册表

时间:2011-08-05 12:00:51

标签: c# 64-bit registry

我想知道是否可以在64位PC上访问C#中的以下注册表项。

HKLM \ SOFTWARE \微软\的Windows \ CurrentVersion \运行

在32位PC上访问时,它可以正常工作,但在64上它会将其重定向到具有不同密钥的HKLM \ SOFTWARE \ Wow6432Node的本机64位路径。我已经查看了相关的各种文章,但无法真正找到关于如何在C#中使用64位PC访问32位密钥的明确答案。感谢。

5 个答案:

答案 0 :(得分:13)

如果您的目标是.Net Framework 4.0或更高版本,那么您可以通过在打开所需的注册表项时传递RegistryView.Registry32值来执行此操作。

如果您要定位以前版本的.Net Framework,那么您需要使用P / Invoke直接调用RegOpenKeyEx,允许您传递KEY_WOW64_32KEY标记。

这里有一个指南更详细:

答案 1 :(得分:5)

在x64中编译应用程序,一切都很好。在Visual Studio 2010中,您可以通过更改Project Properties > Build

下的设置来完成此操作

enter image description here

对于VS Express用户:

  

在VC#Express中,缺少此属性,但您仍然可以创建   x86配置,如果你知道在哪里看。

     

它看起来像一长串的步骤,但一旦你知道这些步骤   事情变得容易多了。任何只有VC#Express的人都会   可能觉得这很有用。了解Configuration Manager后,   它下次会更加直观。

     
      
  1. 在VC#Express中,转到工具 - >选项。
  2.   
  3. 在“选项”对话框的左下角,选中该框   说,“显示所有设置”。
  4.   
  5. 在左侧的树状视图中,选择“项目和   解决方案。”
  6.   
  7. 在右侧的选项中,选中“显示”框   高级构建配置。“
  8.   
  9. 单击“确定”。
  10.   
  11. 转到Build - >配置管理器......
  12.   
  13. 在项目旁边的“平台”列中,单击组合框和   选择“”。
  14.   
  15. 在“新平台”设置中,选择“x64”。
  16.   
  17. 单击“确定”。
  18.   
  19. 点击关闭。
  20.   
  21. 那里,你现在有一个x64配置!非常简单! : - )
  22.   

答案 2 :(得分:5)

Project + Properties,Build选项卡,Platform target =任何CPU。从32位应用程序访问64位注册表需要.NET 4和带有RegistryView.Registry64选项的新RegistryKey.OpenBaseKey()方法。

这只允许您读取密钥,写入密钥值需要UAC提升。您可以在没有提升的情况下写入HKCU,也不需要进行注册表重定向。

答案 3 :(得分:2)

你有倒退,Wow6432Node适用于32位应用程序。因此,如果您的应用程序是32位(x86),那么您将自动重定向到该“节点”。

您可以使用.NET 4中的FromHandle方法指定要使用的视图,但它的使用不是很明显,并且可以problems

answer使用Win32 API解决了这个问题,您也可以在C#中使用它。

答案 4 :(得分:1)

它想重定向。您需要检测此重定向并改为读取WoW6432Node键。 HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run是64位注册表,只能由64位应用程序访问。

显然,你应该编写代码来支持两者。