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标志.
这里有一个指南更详细:
在x64中编译你的应用程序,一切都应该很好.在Visual Studio 2010中,您可以通过更改下面的设置来完成此操作Project Properties > Build

对于VS Express用户:
在VC#Express中,缺少此属性,但如果您知道要查找的位置,仍可以创建x86配置.
它看起来像一长串的步骤,但一旦你知道这些东西在哪里,它就容易多了.只有VC#Express的人可能会觉得这很有用.一旦了解了Configuration Manager,下次它就会更加直观.
- 在VC#Express中,转到"工具" - >"选项".
- 在"选项"对话框的左下角,选中"显示所有设置"框.
- 在左侧的树视图中,选择"项目和解决方案".
- 在右侧的选项中,选中"显示高级构建配置"框.
- 单击确定.
- 转到Build - > Configuration Manager ...
- 在项目旁边的"平台"列中,单击组合框并选择"".
- 在"新平台"设置中,选择"x64".
- 单击确定.
- 单击关闭.
- 在那里,现在你有一个x64配置!非常简单!:-)
Project + Properties,Build选项卡,Platform target =任何CPU.从32位应用程序访问64位注册表需要.NET 4和带有RegistryView.Registry64选项的新RegistryKey.OpenBaseKey()方法.
这只允许您读取密钥,写入密钥值需要UAC提升.您可以在没有提升的情况下写入HKCU,也不需要进行注册表重定向.