因此,我们的一位客户在旧版 Windows 版本上使用我们的软件,因为他们处于工业、隔离环境中,并且他们拥有 Windows XP 和一堆旧服务器,这是唯一适合他们的东西。其中一些是 64 位的。
阅读注册表时我注意到,在某些情况下,我们的 32 位应用程序实际上可以直接读取 64 位 Window 上的以下条目 - 理论上这是不可能的:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer
并从字符串值“Version”中提取版本号。
但是,如果我们在同一台 PC 上创建一个密钥(例如)
HKEY_LOCAL_MACHINE\SOFTWARE\Our Software
并添加一个字符串值(例如“上次服务”),则无法读取该密钥。
当我们尝试将其添加到其中时,权限和所有权与 IE 条目相同,但无济于事。
当然,使用是\\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Our Software\Last Service Date
可行的,但为什么如果其他一些东西可以进入注册表的“正常”部分并且可读,有些则不能呢?从应用程序中提取数据来读取服务日期时会更容易、更清晰,如果不小心将其错误地添加到标准 HKEY_LOCAL_MACHINE 中,则至关重要。
我错过了什么吗?
您遇到过 注册表重定向器:
某些应用程序注册表项(例如
HKEY_LOCAL_MACHINE\Software
始终重定向)。大多数注册表配置单元都没有重定向。32/64 位程序仍可以通过在请求中包含特殊标志来强制访问 64/32 位版本的注册表,如 访问备用注册表视图一文中所述。另请参阅 WOW64 上的注册表重定向示例。