我正在尝试使用 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 库的优秀项目,并且通过 Advapi32Util
和 Advapi32
支持平台库 (platform.jar) 中的 Windows 注册表。它非常好且易于使用。并且写入注册表不需要管理员权限。
但是如何在 Win7 上的 64 位 JVM 中读取/写入 32 位注册表(在 WOW6432Node 节点下)?
默认情况下,64 位节点在 64 位 JVM 中读/写,32 位节点在 32 位 JVM 中读/写。
但是在 64 位 JVM 中,我想读/写 32 位节点(例如, HKLM->SOFTWARE->Wow6432Node->ODBC
)。我怎样才能做到这一点?
最佳答案
我得到了答案:
使用 64 位 Windows:
HKLM->SOFTWARE->ODBC
会重定向到 HKLM->SOFTWARE->Wow6432Node->ODBC
HKLM->SOFTWARE->ODBC
将是 HKLM->SOFTWARE->ODBC
(即 64 位注册表)。 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/