C# 32位应用程序未更新64位注册表项
注册表项未在C中提到的路径上更新# 而不是在以下路径中更新给定的路径值:-C# 32位应用程序未更新64位注册表项,c#,C#,注册表项未在C中提到的路径上更新# 而不是在以下路径中更新给定的路径值:- @"Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\"; 我的机器是64位的,我运行的应用程序是32位的 请建议如何更新上述路径地址的值,即在Software\Microsoft中,而不是Software\wow6432node中。您可以通过两种方式进行更新 RegistryView.Registry64和OpenBaseKey在.Ne
@"Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\";
我的机器是64位的,我运行的应用程序是32位的
请建议如何更新上述路径地址的值,即在
Software\Microsoft
中,而不是Software\wow6432node
中。您可以通过两种方式进行更新
和RegistryView.Registry64
在.Net 4及更高版本中OpenBaseKey
Api调用RegOpenKeyEx
,在早期版本中使用Advapi32.dll
标志KEY\u WOW64\u 64KEY
using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
{
using (var subKey = baseKey.OpenSubKey("blah", RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl))
{
if (subKey != null)
{
var value = subKey.GetValue("Somekey");
}
}
}
PInvoke使用RegOpenKeyEx
和KEY\u WOW64\u 64KEY
可以在这里找到
注意:这两个选项都应该允许您的32位应用程序访问完整的
注册表,而不仅仅是WOW6432节点注册表重定向程序
资源
唯一的问题是在更改注册表中的值后,它会更新用户进程句柄,但系统需要重新启动。有什么方法可以阻止吗?@mehtaankit,我想这是windows在启动时读到的东西,我不确定你是否可以绕过重启。虽然我不是100%肯定
using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
{
using (var subKey = baseKey.OpenSubKey("blah", RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl))
{
if (subKey != null)
{
var value = subKey.GetValue("Somekey");
}
}
}