从32位应用程序创建的64位的注册表项(非WOW64)
-
25-09-2019 - |
题
我有一个是创造一些注册表项一个Visual Studio安装程序:
HKEY_LOCAL_MACHINE\SOFTWARE\MyApp
但它正在创建的注册表项被自动Wow6432Node下出现:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyApp
如何在我的C#代码创建注册表项时,由MSI执行?我忽略Wow6432Node
解决方案
仅供参考,.NET 4.0支持这本身。例如:
RegistryBase = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
可以然后使用的 RegistryBase 强>变量来访问任何在HKLM的64位图。相反,的 Registry32 强>将让64位应用程序访问注册表的32位图。
其他提示
看一看 http://www.pinvoke.net/default的.aspx / ADVAPI32 / regopenkeyex.html 。你需要使用注册表重定向器,并通过在适当的值的访问掩码。不幸的是你需要的PInvoke。
由于有大约OpenBaseKey
很少的文档,我扩大shifuimam的回答,并提供了OP的解决方案:
Private Sub Foo()
Dim myAppIs64Bit = Environment.Is64BitProcess
Dim baseKey As RegistryKey
If (myAppIs64Bit) Then
baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)
Else
baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)
End If
Dim myAppKey As RegistryKey = baseKey.OpenSubKey("SOFTWARE\MyApp")
End Sub
如果该应用是32位的,myAppKey
指向HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyApp
。如果64位,它指向HKEY_LOCAL_MACHINE\SOFTWARE\MyApp
。
OpenBaseKey
的优点是它消除在代码需要参考Wow6432
。
不隶属于 StackOverflow