我对Windows 7注册表问题感到难过,虽然各种问题和答案让我在那里找到了一些方法,但我见过的那些问题解决了我的特定问题。我不知道其他Windows版本是否会影响这个问题,但我们都有win7x64机器。
我们的工作中有各种各样的工具,一些C ++,一些C#,一些python(2.6)等。我们还运行32位和64位工具。过去,我们很高兴地将注册表信息存储在HKLM
中。我们一直致力于将内容转移到HKCU
。关于是否要这样做,对UAC
等有影响,我们已经进行了很多讨论。我们真的想尝试采取这一举措。那说:
我们无法从HKCU/software/CompanyABC/App
读取/编写注册表项。我们在python中编写了一个app
编写器,使用_winreg
将注册表键写入上述位置。无论我们是指定KEY_WRITE
| KEY_WOW64_32KEY
还是仅指定KEY_WRITE,都会将值写入HKCU/Software/WOW6432Node/companyABC/app
。细
然后我有一个C#应用程序试图读取这些值。使用Microsoft.Win32.Registry
,我打开子项('HKCU / Software / CompanyABC / app'),我看不到我的值。事实证明我发现了以下行为:
HKLM
读取/编写注册表项时,这些东西都可以正常工作。 python应用程序将写入HKLM/Softare/Wow6432Node/CompanyABC/app
,C#代码将从该位置读取。考虑到我们如何构建C#应用程序以及通过python _winreg
函数会写入HKCU/Sofrware/Wow6432Node/CompanyABC/app
,但C#应用会从HKCU/Software/CompanyABC/app
读取。 C#应用程序是作为x86应用程序构建的(不是任何CPU而不是x64)所以我假设应用程序可以正确地重定向到wow6432Node
,但它似乎没有。HKCU/Software
不同。 This文章似乎表明此区域是“共享”而未重定向。如果是这种情况,那么我无法理解为什么我们的python应用程序(再次使用_winreg)正在写入使用Wow6432Node
的HKCU中的某个位置 - 它似乎应该在没有重定向的情况下编写它。我想它可能是_winreg
中的错误。
我真的想避免在我们的工具中明确地使用WOW6432Node
,但这就是我今天所处的位置。任何人都可以向我解释如何将注册表访问从32位和64位进程正确地工作到HKCU
,而不必使用硬编码路径进入32位配置单元?
答案 0 :(得分:4)
我从问题的评论中了解到这个问题已经消失,对于遇到此问题的其他人,您可以使用Microsoft.Win32.OpenBaseKey来指定是否在打开注册表的64位或32位时即使您的进程是以32位进程运行,也可以在64位计算机上运行。
如果您总是想要访问注册表的NON-WOW6432Node部分中的密钥,那么您可以安全地将OpenBaseKey的View参数设置为RegistryView。Registry64。这将在64位和32位操作系统上正常工作。