我正在尝试使用 JAVA 在 64 位 Win7 上读取/写入 Windows 注册表。

首先,我尝试了 JDK java.util.prefs.Preferences and its reflection usage 。这是一个很好的解决方案,但它仅支持读取/写入 REG_SZ 类型(字符串)值。

不幸的是,我需要读/写 REG_BINARY,所以放弃它。

其次,我尝试了 JNI Registry 。读可以,但是写通常会失败,因为写HKLM需要管理员权限。我不知道如何在 JAVA 中获得管理员权限。

最后,我尝试了 JNA(Java Native Access),这是一个使用 native 库的优秀项目,并且通过 Advapi32UtilAdvapi32 支持平台库 (platform.jar) 中的 Windows 注册表。它非常好且易于使用。并且写入注册表不需要管理员权限。

但是如何在 Win7 上的 64 位 JVM 中读取/写入 32 位注册表(在 WOW6432Node 节点下)?

默认情况下,64 位节点在 64 位 JVM 中读/写,32 位节点在 32 位 JVM 中读/写。

但是在 64 位 JVM 中,我想读/写 32 位节点(例如, HKLM->SOFTWARE->Wow6432Node->ODBC )。我怎样才能做到这一点?

最佳答案

我得到了答案:
使用 64 位 Windows:

  • 32 位 JVM,访问 HKLM->SOFTWARE->ODBC 会重定向到 HKLM->SOFTWARE->Wow6432Node->ODBC
  • 64 位 JVM,访问 HKLM->SOFTWARE->ODBC 将是 HKLM->SOFTWARE->ODBC(即 64 位注册表)。
  • 32 或 64 位 JVM,允许访问 HKLM->SOFTWARE->Wow6432Node->ODBC。 (但在C++中,win32 exe不能直接访问HKLM->SOFTWARE->Wow6432Node->ODBC,应该用wow64标志访问HKLM->SOFTWARE->ODBC)。
  • 关于java - 使用 JAVA 和 JNA 在 64 位 Win 7 上读取/写入 Windows 注册表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34407938/

    10-12 06:02