当前位置: 首页 > 编程语言 > C#

C#在64位操作系统上读取错误的注册表数据分享

时间:2023-04-10 12:23:32 C#

C#在64位操作系统上读取错误的注册表数据我使用的是64位Windows,我的应用程序以提升权限运行启动。我对以下非常简单的代码有疑问:myKey=Registry.LocalMachine.OpenSubKey(@"SOFTWAREMicrosoftWindowsCurrentVersionRun");if(myKey!=null){string[]HKLMvaluenames=myKey.GetValueNames();}但出于某种原因,HKLMvaluenames数组中填充了来自以下键的值:HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionRun这个问题有解决方法吗?这是设计使然,32位程序与64位程序具有不同的注册表视图。当他们尝试从HKLMSoftware配置单元读取值时,他们被重定向到HKLMSoftwareWow6432Node键。如果您使用Project+Properties、Build选项卡、PlatformTarget=AnyCPU构建C#程序,那么它将作为64位程序运行并且不会被重定向。32位程序可以取消重定向,但使用.NETRegistryKey类并不容易。P/需要使用KEY_WOW64_64KEY选项调用RegOpenKeyEx。这篇WindowsSDK文章中提供了更多信息。编辑:现在,.NET也可以使用.NET4特定的RegistryKey.OpenBaseKey()方法。传递RegistryView.Registry64以将注册表视为64位进程。虽然我遇到了同样的问题或者同样关心这个问题的原因,但我找到了解决方案。使用这个://要将Base设置为正确的路径,请将RegistryView设置为DEFAULT、Registry64或Registry32,以了解您需要的路径。如果你想遍历x64root:现在它将按照您想要的方式运行。玩得开心!这是另一篇文章的副本。这里有一些应该有用的信息。如何从32位应用程序读取64位注册表,反之亦然详细了解C#学习教程,希望大家多加关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: