Winapi x64计算机上win32应用程序中的注册表

Winapi x64计算机上win32应用程序中的注册表,winapi,registry,installshield,Winapi,Registry,Installshield,我正在使用installshield 2010 express edition制作win32应用程序的安装文件 我在注册一些注册表项时遇到一些问题 我将installshield项目(.ise)配置为注册两个注册表项,如下所示 [HKCU\Software\ProgName\SomeKeys] [HKLM\Software\ProgName\SomeKeys] 当我在x64机器上安装此设置时,HK键将写入Wow6432Node[HKLM\Software\Wow6432Node\ProgName

我正在使用installshield 2010 express edition制作win32应用程序的安装文件

我在注册一些注册表项时遇到一些问题

我将installshield项目(.ise)配置为注册两个注册表项,如下所示

  • [
    HKCU\Software\ProgName\SomeKeys
    ]
  • [
    HKLM\Software\ProgName\SomeKeys
    ]
  • 当我在x64机器上安装此设置时,HK键将写入
    Wow6432Node
    [
    HKLM\Software\Wow6432Node\ProgName\SomeKeys
    ]。这正是我想要的

    但HKCU不会将任何内容写入
    WOW6432节点
    。 它写在[
    HKCU\Software\ProgName\SomeKeys
    ]上,而不是[
    HKCU\Software\Wow6432Node\ProgName\SomeKeys
    ]

    为什么会出现这个问题


    请给我一些建议。谢谢

    这是正常工作的,这是由微软设计的。请阅读MSDN文档:

    重定向的密钥映射到
    Wow6432Node
    下的物理位置

    在WOW64下,某些注册表项被重定向。当32位或64位应用程序对重定向的项进行注册表调用时,注册表重定向器会截获该调用并将其映射到该项对应的物理注册表位置。有关详细信息,请参阅

    其他注册表项由64位Windows上的32位和64位应用程序共享。对共享键的32位注册表调用不会重定向。相反,注册表项的一个物理副本映射到注册表的每个逻辑视图中

    HKCU\Software
    下面的用户定义子键是共享的,因此它们没有
    Wow6432Node
    子键


    HKLM\Software
    下面的用户定义键被重定向,因此它们有一个子键
    Wow6432Node

    这是正常工作的,由微软设计的。请阅读MSDN文档:

    重定向的密钥映射到
    Wow6432Node
    下的物理位置

    在WOW64下,某些注册表项被重定向。当32位或64位应用程序对重定向的项进行注册表调用时,注册表重定向器会截获该调用并将其映射到该项对应的物理注册表位置。有关详细信息,请参阅

    其他注册表项由64位Windows上的32位和64位应用程序共享。对共享键的32位注册表调用不会重定向。相反,注册表项的一个物理副本映射到注册表的每个逻辑视图中

    HKCU\Software
    下面的用户定义子键是共享的,因此它们没有
    Wow6432Node
    子键


    HKLM\Software
    下面的用户定义键被重定向,因此它们有一个
    Wow6432Node
    子键。

    请注意,有些计算机确实有一个
    HKCU\Software\Wow6432Node
    键,但这只是因为一个bug。它不是一个“真正的”32位节点,只是一个由软件用硬编码路径编写的普通注册表项。有些人仍然很难理解,他们永远不应该直接访问
    Wow6432Node
    键,他们应该让注册表重定向程序代表他们来处理,通过在打开/创建密钥时指定适当的32位/64位视图标志。我拥有的每台计算机都包含此密钥
    HKEY\U CURRENT\U USER\SOFTWARE\Wow6432Node\Microsoft\Active Setup
    ,这让我咯咯笑了起来。即使是微软也不能做到这一点!此文档具有相同的oops:。在我的机器上,甚至Embarcadero在一个特定的键中也有相同的OOP:
    HKEY\U CURRENT\U USER\Software\Wow6432Node\Embarcadero\BDS\9.0\AutoRun\UpdateCheck
    。请注意,有些计算机确实有一个
    HKCU\Software\Wow6432Node
    键,但这只是因为有一个bug。它不是一个“真正的”32位节点,只是一个由软件用硬编码路径编写的普通注册表项。有些人仍然很难理解,他们永远不应该直接访问
    Wow6432Node
    键,他们应该让注册表重定向程序代表他们来处理,通过在打开/创建密钥时指定适当的32位/64位视图标志。我拥有的每台计算机都包含此密钥
    HKEY\U CURRENT\U USER\SOFTWARE\Wow6432Node\Microsoft\Active Setup
    ,这让我咯咯笑了起来。即使是微软也不能做到这一点!此文档具有相同的oops:。在我的机器上,甚至Embarcadero在一个特定的键中也有相同的OOP:
    HKEY\U CURRENT\U USER\Software\Wow6432Node\Embarcadero\BDS\9.0\AutoRun\UpdateCheck