我被一个Windows7注册表问题难住了,虽然各种各样的问题和答案让我找到了解决问题的方法,但我所见过的任何东西都不能解决我的特殊问题。我不知道其他windows版本是否会影响这个问题,但我们都有win7x64计算机。在
我们在工作中有各种各样的工具,一些C++,一些C语言,一些Python(2.6)等等。我们还运行32和64位工具的混合。过去,我们很乐意将注册表信息存储在HKLM
。我们一直在努力把东西移到HKCU
。关于是否要这样做,对UAC
的影响等,我们已经进行了很多讨论,我们真的想尝试一下。上面说:读取/写入HKCU/software/CompanyABC/App
的注册表项时遇到问题。我们有一个用python编写的app
write,它使用_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应用程序将从^{wow6432Node
,但似乎没有。在经过一番调查,似乎{Wow6432Node
的位置,似乎它应该在没有重定向的情况下编写它。我想这可能是_winreg
中的一个bug。在
我真的想避免在我们的工具中显式地处理WOW6432Node
,但这正是我今天所要做的。有人能给我解释一下,如何使从32位和64位进程到HKCU
的注册表访问正常工作,而不必求助于32位配置单元的硬编码路径?在
我从对这个问题的评论中了解到,这个问题已经消失了,对于遇到这个问题的其他人,您可以使用Microsoft.Win32.OpenBaseKey来指定在64位计算机上运行时是打开注册表的64位还是32位部分,即使您的进程是作为32位进程运行的。在
如果您总是想访问注册表的非WOW6432Node部分中的键,那么可以安全地将OpenBaseKey的View参数设置为RegistryView.Registry64。这将在64位和32位操作系统上正常工作。在
相关问题 更多 >
编程相关推荐