为什么我不能在64位机器上正确读取HKCU中的32位注册表值?

2024-10-04 09:29:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我被一个Windows7注册表问题难住了,虽然各种各样的问题和答案让我找到了解决问题的方法,但我所见过的任何东西都不能解决我的特殊问题。我不知道其他windows版本是否会影响这个问题,但我们都有win7x64计算机。在

我们在工作中有各种各样的工具,一些C++,一些C语言,一些Python(2.6)等等。我们还运行32和64位工具的混合。过去,我们很乐意将注册表信息存储在HKLM。我们一直在努力把东西移到HKCU。关于是否要这样做,对UAC的影响等,我们已经进行了很多讨论,我们真的想尝试一下。上面说:

读取/写入HKCU/software/CompanyABC/App的注册表项时遇到问题。我们有一个用python编写的appwrite,它使用_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应用程序将从^{读取。C应用程序是作为x86应用程序构建的(不是任何CPU,也不是x64),所以我假设该应用程序将被正确地重定向到wow6432Node,但似乎没有。在

经过一番调查,似乎{}是不同的。This这篇文章似乎表明这个区域是“共享的”而不是重定向的。如果是这样的话,那么我就不明白为什么我们的python应用程序(同样,使用了_winreg)会写入HKCU中使用Wow6432Node的位置,似乎它应该在没有重定向的情况下编写它。我想这可能是_winreg中的一个bug。在

我真的想避免在我们的工具中显式地处理WOW6432Node,但这正是我今天所要做的。有人能给我解释一下,如何使从32位和64位进程到HKCU的注册表访问正常工作,而不必求助于32位配置单元的硬编码路径?在


Tags: 工具keyapp应用程序注册表software重定向write
1条回答
网友
1楼 · 发布于 2024-10-04 09:29:13

我从对这个问题的评论中了解到,这个问题已经消失了,对于遇到这个问题的其他人,您可以使用Microsoft.Win32.OpenBaseKey来指定在64位计算机上运行时是打开注册表的64位还是32位部分,即使您的进程是作为32位进程运行的。在

如果您总是想访问注册表的非WOW6432Node部分中的键,那么可以安全地将OpenBaseKey的View参数设置为RegistryView.Registry64。这将在64位和32位操作系统上正常工作。在

相关问题 更多 >