C#访问64位注册表

Bal*_*i C 11 c# registry 64-bit

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

HKLM\SOFTWARE \微软\的Windows\CurrentVersion\Run中

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

Jus*_*tin 14

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

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

这里有一个指南更详细:


fox*_*oxy 5

在x64中编译你的应用程序,一切都应该很好.在Visual Studio 2010中,您可以通过更改下面的设置来完成此操作Project Properties > Build

在此输入图像描述

对于VS Express用户:

在VC#Express中,缺少此属性,但如果您知道要查找的位置,仍可以创建x86配置.

它看起来像一长串的步骤,但一旦你知道这些东西在哪里,它就容易多了.只有VC#Express的人可能会觉得这很有用.一旦了解了Configuration Manager,下次它就会更加直观.

  1. 在VC#Express中,转到"工具" - >"选项".
  2. 在"选项"对话框的左下角,选中"显示所有设置"框.
  3. 在左侧的树视图中,选择"项目和解决方案".
  4. 在右侧的选项中,选中"显示高级构建配置"框.
  5. 单击确定.
  6. 转到Build - > Configuration Manager ...
  7. 在项目旁边的"平台"列中,单击组合框并选择"".
  8. 在"新平台"设置中,选择"x64".
  9. 单击确定.
  10. 单击关闭.
  11. 在那里,现在你有一个x64配置!非常简单!:-)


Han*_*ant 5

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

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