代码之家  ›  专栏  ›  技术社区  ›  James Newton-King dbc

从32位应用程序创建64位注册表项(非WOW64)

  •  13
  • James Newton-King dbc  · 技术社区  · 16 年前

    我有一个Visual Studio安装程序正在创建一些注册表项:

    HKEY_LOCAL_MACHINE\SOFTWARE\MyApp
    

    但它正在创建的注册表项会自动显示在Wow6432Node下:

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyApp
    

    3 回复  |  直到 16 年前
        1
  •  23
  •   CXL    16 年前

    仅供参考,.NET 4.0本机支持此功能。例子:

    RegistryBase = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
    

    然后你就可以用它了 变量来访问HKLM的64位视图中的任何内容。相反地 登记处32 将允许64位应用程序访问注册表的32位视图。

        2
  •  1
  •   nithins    16 年前

    看看 http://www.pinvoke.net/default.aspx/advapi32/regopenkeyex.html . 您需要使用注册表重定向器并为访问掩码传入正确的值。不幸的是,你需要品沃克。

        3
  •  1
  •   mr_plum    12 年前

    OpenBaseKey ,我将详细介绍Shifiimam的答案,并为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
    

    myAppKey 指向 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MyApp HKEY_LOCAL_MACHINE\SOFTWARE\MyApp .

    优势 OpenBaseKey 它消除了引用的需要 Wow6432 在你的代码中。

    推荐文章