Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 32位应用程序未更新64位注册表项_C# - Fatal编程技术网

C# 32位应用程序未更新64位注册表项

C# 32位应用程序未更新64位注册表项,c#,C#,注册表项未在C中提到的路径上更新# 而不是在以下路径中更新给定的路径值:- @"Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\"; 我的机器是64位的,我运行的应用程序是32位的 请建议如何更新上述路径地址的值,即在Software\Microsoft中,而不是Software\wow6432node中。您可以通过两种方式进行更新 RegistryView.Registry64和OpenBaseKey在.Ne

注册表项未在C中提到的路径上更新#

而不是在以下路径中更新给定的路径值:-

@"Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\";
我的机器是64位的,我运行的应用程序是32位的


请建议如何更新上述路径地址的值,即在
Software\Microsoft
中,而不是
Software\wow6432node

中。您可以通过两种方式进行更新

  • RegistryView.Registry64
    OpenBaseKey
    在.Net 4及更高版本中
  • RegOpenKeyEx
    Api调用
    Advapi32.dll
    ,在早期版本中使用
    KEY\u WOW64\u 64KEY
    标志
RegistryView枚举:在64位版本的Windows上,部分注册表被存储 分别适用于32位和64位应用程序。有一个32位的视图 对于32位应用程序和64位应用程序的64位视图

使用OpenBaseKey和时,可以指定注册表视图 OpenRemoteBaseKey(注册表配置单元, 一串 RegistryView)方法,以及 RegistryKey对象上的FromHandle属性

使用注册表64编码

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");
      }
   }
}