避免使用注册表Wow6432Node重定向

29 c# registry wow64

我试图在c#中使用Microsoft.Win32.RegistryKey插入一些简单的注册表项,但路径会自动更改为:

HKEY_LOCAL_MACHINE\SOFTWARE\Test
Run Code Online (Sandbox Code Playgroud)

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Test
Run Code Online (Sandbox Code Playgroud)

我试过谷歌,但我只得到一些模糊和混乱的结果.有没有人以前处理过这个问题?一些示例代码将得到很多赞赏.

Hui*_*Hui 26

您可以使用RegistryKey.OpenBaseKey来解决此问题:

var baseReg = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
var reg = baseReg.CreateSubKey("Software\\Test");
Run Code Online (Sandbox Code Playgroud)

  • 仅限.NET 4+ (5认同)
  • 别忘了处理baseReg!使用(var baseReg = ...){..} (3认同)

Jac*_*nev 9

在WOW64下,某些注册表项被重定向(SOFTWARE).当32位或64位应用程序对重定向的密钥进行注册表调用时,注册表重定向器会拦截该调用并将其映射到密钥的相应物理注册表位置.有关更多信息,请参阅注册表重定向器.

您可以使用RegistryKey.OpenBaseKey方法上的RegistryView枚举显式打开32位视图并直接访问HKLM\Software \.

  • @Kevin在.net 4之前,您必须调用本机API [RegOpenKeyEx](https://msdn.microsoft.com/en-us/library/ms724897(VS.85).aspx)传递[KEY_WOW64_32KEY或KEY_WOW64_64KEY之一](https://msdn.microsoft.com/en-us/library/windows/desktop/aa384129(v = vs.85).aspx)适当的标志. (3认同)

Ped*_*o77 9

我不知道如何使用.reg文件解决它.但仅在BAT文件中,如下所示:

您必须/reg:64在命令行的末尾添加.例如:

REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background" /v "OEMBackground" /t REG_DWORD /d 0x00000001 /f /reg:64
Run Code Online (Sandbox Code Playgroud)

来源:Wow6432Node以及如何通过Sccm将注册表设置部署到64位系统