我有一个是创造一些注册表项一个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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top